Hive 0.13 に BIG テーブルがあります。1 日あたり約 250 GB のデータがあります。したがって、1 時間あたり、約 10 GB のデータになります。BI ツールが生成して Hive で実行するクエリをテストするために、1 日または 1 時間ごとにこのテーブルのデータにアクセスしたい BI ツールがあります。
BI が昨日の日次データに使用されるクエリの 1 つは、次のようになります。
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 の My Table であり、YYYY、MM、および DD は MY_TABLE のパーティション分割された列です。すでに ORC 形式で保存されています。
上記のクエリは非常に長い時間実行されます.EXPLAIN EXTENDED出力を見ると、フィルター条件に関係なくMY_TABLEのFULL TABLE SCANを実行していることがわかります.
どうすればこの問題を回避できますか?
親切なアドバイス。
再度注意してください: Hive のバージョンは 0.13 です。アップグレードの途中です。
ありがとう、
スッダサトワ
ノート:
ここで提供されている解決策 (このクエリでパーティションの削除が行われないのはなぜですか? ) は私の場合には適用できません。なぜなら、私は Hive 0.13 を使用しているのに対し、CURRENT_DATE 関数は Hive バージョン 1 以降でしか使用できないからです。