hive - Hive中基于Partition和非partition列的查询
问题描述
我有一个外部 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 列(国家代码、来源Nbr、日期)划分。我知道如果我基于这 3 个分区列进行查询,我的查询会更快。
我对其他查询模式有一些疑问:-
如果我在执行 sql 查询时添加非分区列以及 countryCode、sourceNbr、date、ItemNbr等分区列作为 where 条件的一部分,它将扫描整个表还是仅在基于 countryCode、sourceNbr、date 的文件夹内扫描并查找在 where 条件中指定的 itemNbr 属性值?
提供所有列是过滤记录或子过滤器所必需的,就像我只提供前 2 列(countryCode、sourceNbr)作为 where 条件的一部分。在这种情况下,它会扫描整个表,还是会根据 2 列条件(countryCode、sourceNbr)仅在文件夹内搜索?
解决方案
分区修剪适用于所有情况,无论所有分区列都在 WHERE 还是仅部分列,其他过滤器都不会影响分区修剪。
要检查它使用EXPLAIN EXTENDED
命令,请参阅https://stackoverflow.com/a/50859735/2700344
推荐阅读
- python - 如何在不将索引转换为另一种格式的情况下为日期时间索引数据创建线图?
- ruby-on-rails - Rails 5.2:保护 form_for 以防止用户更改表单 select_tag / hidden_field 值
- neo4j - Neo.ClientError.Statement.ExternalResourceFailed
- openam - Forgerock 错误“处理此请求时发生错误。请联系您的管理员”
- reactjs - 仅当我使用模态时,如何在模态中使用componentdidmount?
- c++ - 是否可以在工作后将线程连接到“并行”区域?
- arrays - 阵列的交替和移动部分
- magento2 - 将自定义/扩展属性添加到送货/账单地址 :: js set-shipping-infromation-mixin.js 错误
- c# - 是否有更改项目属性的功能?
- virtualenv - 全局运行虚拟环境?