Hive 分区验证

Posted

技术标签:

【中文标题】Hive 分区验证【英文标题】:Hive Partitioning validation 【发布时间】:2018-06-14 13:35:08 【问题描述】:

我创建了一个分区 hive 表。我将数据插入到此表中。现在假设我使用where 子句执行一个select * 查询,那么我如何确保配置单元查询正在使用分区?

【问题讨论】:

请考虑在您的问题中添加代码和响应示例,以使其更有可能获得建设性的答案:例如:您尝试过哪些代码?反应如何偏离您的预期结果?有错误吗? Here's a helpful resource. 当然,我会确保它..这是一个正常的查询,根本不需要代码 【参考方案1】:

假设您的 HIVE 数据被拆分为 3 个分区,并且每个 HDFS 分区包含一个不大于一个 HDFS 块的文件,那么在分区值上带有 WHERE 的 SELECT * 应该会触发一个 YARN 映射器。

请注意,这种行为可能与新的 HIVE 引擎(如 TEZ 和 LLAP (Hortonworks) 或 Impala (Cloudera) 不同)

【讨论】:

【参考方案2】:

您可以通过执行EXPLAIN EXTENDED 命令来验证分区修剪工作。

EXPLAIN EXTENDED select * from mytable where load_date='2018-01-01';

计划中的分区信息如下:

Path -> Partition: s3n://bucket_name/mytable/load_date=2018-01-01 
Partition base file name: load_date=2018-01-01 
input format: org.apache.hadoop.hive.ql.io.orc.OrcInputFormat 
output format: org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat 
partition values: load_date 2018-01-01

【讨论】:

以上是关于Hive 分区验证的主要内容,如果未能解决你的问题,请参考以下文章

hive创建分区 9870查询不到

hive的严格模式和分区

hive外部表分区

hive中怎样删除分区

Hive分区(静态分区+动态分区)

hive扫描分区不超过400个