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

标签 hive parquet hadoop-partitioning hive-partitions

我有一个外部 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、日期扫描文件夹内部,并查找在where条件中指定的itemNbr属性值?

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

最佳答案

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

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

关于hive - Hive中基于分区列和非分区列的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68512621/

相关文章:

python - 如何让Pandas Python中的HBase中不存储空值?

scala - 从分区的 Parquet 文件读取DataFrame

hadoop - 无法将文件从本地目录放入 HDFS

dataframe - 使用数据框在Spark中处理数据差异(增量)

hadoop - Hive分区如何工作

hadoop - 从机上的DiskErrorException-Hadoop多节点

oracle - Hive 中的隐式数据类型转换

apache-spark - Pyspark 中是否有等效于 SQL 的 MSCK REPAIR TABLE 的方法

hadoop - 除 select * 外的任何配置单元查询挂起

python - 使用 dask 将 CSV 文件转换为 parquet(jupyter 内核崩溃)