我在 Hive 0.13 中有一个大表 - 它每天大约有 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 的 FULL TABLE SCAN,而与过滤条件无关。
我们怎样才能避免这个问题?
好心提醒。
再次注意:Hive 版本是 0.13。我们正在进行升级。
谢谢,
净土
笔记:
此处提供的解决方案(为什么此查询不发生分区消除?)不适用于我的情况,因为我使用的是 Hive 0.13,而 CURRENT_DATE 函数仅在 Hive 版本 1.+ 之后可用。