我在Hive 0.13中有一张BIG表 - 它每天有大约250 GB的数据。因此,每小时大约有10 GB的数据。我有一个BI工具,希望每天或每小时访问此表的数据,我需要测试BI工具将在Hive上生成和运行的查询。
当BI用于昨天的每日数据时,其中一个查询如下所示:
select count(*)
from my_table
where
yyyy=year(date_sub(TO_DATE(FROM_UNIXTIME(UNIX_TIMESTAMP())),1))
and mm=month(date_sub(TO_DATE(FROM_UNIXTIME(UNIX_TIMESTAMP())),1))
and dd=day(date_sub(TO_DATE(FROM_UNIXTIME(UNIX_TIMESTAMP())),1))
;
MY_TABLE中的Hive表,而YYYY,MM和DD是MY_TABLE中的分区列。它已经以ORC格式存储。
以上查询运行的时间非常长,当我看到EXPLAIN EXTENDED输出时,我清楚地看到它正在进行MY_TABLE的全表扫描,而不管过滤条件如何。
我们如何避免这个问题?
请告知。
再次注意:Hive版本是0.13。我们正处于升级阶段。
谢谢,
Suddhasatwa
注意:
此处提供的解决方案(Why partitions elimination does not happen for this query?)在我的情况下不适用,因为我使用的是Hive 0.13,而CURRENT_DATE函数仅在Hive版本1 +后可用。