Hive中基于分区和非分区列的查询
Querying based on Partition and non-partition column in Hive
我有一个外部 Hive table 如下:-
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/';
其中 table 按 3 列(国家代码、sourceNbr、日期)划分。我知道如果我基于这 3 个分区列进行查询,我的查询会更快。
我对其他查询模式有一些疑问:-
如果我在执行 sql 查询,它会扫描完整的 table 还是只扫描基于 countryCode、sourceNbr、date 的文件夹内部并查找在 where 条件中指定的 itemNbr 属性值?
必须提供所有列才能过滤记录或
子过滤器也可以像我只给出前 2 列一样工作
(countryCode, sourceNbr) 作为 where 条件的一部分。在这种情况下
它会扫描完整的 table 或者它只会在文件夹内搜索
基于 2 列条件 (countryCode, sourceNbr) ?
分区修剪适用于所有情况,无论所有分区列在 WHERE 中还是仅部分,其他过滤器都不会影响分区修剪。
要检查它,请使用 EXPLAIN EXTENDED
命令,请参阅
我有一个外部 Hive table 如下:-
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/';
其中 table 按 3 列(国家代码、sourceNbr、日期)划分。我知道如果我基于这 3 个分区列进行查询,我的查询会更快。
我对其他查询模式有一些疑问:-
如果我在执行 sql 查询,它会扫描完整的 table 还是只扫描基于 countryCode、sourceNbr、date 的文件夹内部并查找在 where 条件中指定的 itemNbr 属性值?
必须提供所有列才能过滤记录或 子过滤器也可以像我只给出前 2 列一样工作 (countryCode, sourceNbr) 作为 where 条件的一部分。在这种情况下 它会扫描完整的 table 或者它只会在文件夹内搜索 基于 2 列条件 (countryCode, sourceNbr) ?
分区修剪适用于所有情况,无论所有分区列在 WHERE 中还是仅部分,其他过滤器都不会影响分区修剪。
要检查它,请使用 EXPLAIN EXTENDED
命令,请参阅