Hive中基于分区和非分区列的查询

问题描述

我有一个外部 Hive 表,如下所示:-

CREATE external TABLE sales (
ItemNbr STRING,itemShippedQty INT,itemDeptNbr SMALLINT,gateOutUserId STRING,code VARCHAR(3),trackingId STRING,baseDivCode STRING
)
PARTITIONED BY (countryCode STRING,sourceNbr INT,date STRING)
STORED AS PARQUET
LOCATION '/user/sales/';

其中表按 3 列( countryCode、sourceNbr、date)进行分区。我知道如果我基于这 3 个分区列进行查询,我的查询会更快。

我对其他查询模式有一些疑问:-

  1. 如果我在执行 sql 查询时将非分区列与分区列(如 countryCode、sourceNbr、date、ItemNbr)一起添加为 where 条件的一部分,它会扫描整个表还是它将仅根据 countryCode、sourceNbr、date 扫描文件夹内部并查找 where 条件中指定的 itemNbr 属性值?

  2. 提供所有列对于过滤记录或 子过滤器也可以像我只给出前 2 列一样工作 (countryCode,sourceNbr ) 作为 where 条件的一部分。在这种情况下 它会扫描整个表格,或者只会在文件夹内搜索 基于 2 列条件 (countryCode,sourceNbr) ?

解决方法

分区修剪适用于所有情况,无论所有分区列都在 WHERE 中还是仅部分,其他过滤器不影响分区修剪。

要检查它使用 EXPLAIN EXTENDED 命令,请参阅 https://stackoverflow.com/a/50859735/2700344

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...