1

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 以降でしか使用できないからです。

4

0 に答える 0