【问题标题】:Hive partition pruning on computed column计算列上的 Hive 分区修剪
【发布时间】:2016-03-03 20:43:54
【问题描述】:

我在 Hive 上有几个表,我的查询试图检索过去 x 天的数据。当我使用直接日期时,Hive 正在修剪分区,但在使用公式时正在执行全表扫描。

select *
from   f_event
where  date_key > 20160101;

scanned partitions..

s3://...key=20160102 [f]
s3://...key=20160103 [f]
s3://...key=20160104 [f]

如果我使用公式来获取过去 4 周的数据

Select count(*)
From    f_event f
Where  date_key  > from_unixtime(unix_timestamp()-2*7*60*60*24, 'yyyyMMdd')

这是扫描表中的所有分区。

环境:Hadoop 2.6.0、EMR、S3 上的 Hive、Hive 1.0.0

【问题讨论】:

    标签: hadoop amazon-s3 hive emr


    【解决方案1】:

    当过滤表达式包含非确定性函数(例如unix_timestamp())时,Hive 不会触发分区修剪。

    the discussion 中提到了一个很好的理由:

    想象一下你遇到的情况:

    WHERE partition_column = f(unix_timestamp()) AND ordinary_column = f(unix_timestamp).

    谓词的右侧必须在映射时进行评估, 而您假设应该在 编译时间,这意味着您有两个不同的值 unix_timestamp() 飘来飘去,只能以糟糕的方式结束。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-17
      • 2017-11-01
      • 1970-01-01
      相关资源
      最近更新 更多