【问题标题】:Querying based on Partition and non-partition column in HiveHive中基于Partition和非partition列的查询
【发布时间】:2021-07-24 18:06:57
【问题描述】:

我有一个外部 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 个分区列进行查询,我的查询会更快。

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

  1. 如果我在执行 sql 查询时添加非分区列以及 countryCode、sourceNbr、date、ItemNbr 等分区列作为 where 条件的一部分,它将扫描整个表还是仅扫描在基于 countryCode、sourceNbr、date 的文件夹内,查找在 where 条件中指定的 itemNbr 属性值?

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

【问题讨论】:

    标签: hive parquet hadoop-partitioning hive-partitions


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-03
      • 2021-07-06
      • 1970-01-01
      相关资源
      最近更新 更多