0

Hive クエリの where 句内でネストされた選択を行う必要があります。サンプル コード スニペットは次のようになります。

select *
from TableA
where TA_timestamp > (select timestmp from TableB where id="hourDim")

上記のスクリプトの実行中にエラーが発生したため、これは可能ですか、それともここで何か間違ったことをしていますか?!

私がやろうとしていることをさらに詳しく説明するために、タイムスタンプ付きの統計を公開する cassandra キースペースがあります。定期的に (たとえば、1 時間ごと)、この統計はハイブを使用して集計され、集計されると、そのデータは対応する時間とは別に保存されます。そのため、クエリを 2 回目に実行する (および連続して実行する) 場合、クエリは新しいデータに対してのみ実行する必要があります (タイムスタンプ > previous_execution_timestamp)。最新の実行されたタイムスタンプを別のハイブテーブルに保存し、その値を使用して生の統計を除外することでそれを実行しようとしています。

ハイブを使用してこれを実現できますか?!

4

3 に答える 3

5

WHERE句内のサブクエリは Hive ではサポートされていません: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+SubQueries

ただし、多くの場合、代わりにJOINステートメントを使用して同じ結果を得ることができます: https://karmasphere.com/hive-queries-on-table-data#join_syntax

たとえば、次のクエリです。

   SELECT a.KEY, a.value
   FROM a
   WHERE a.KEY IN
   (SELECT b.KEY FROM B);

次のように書き換えることができます。

   SELECT a.KEY, a.val
   FROM a LEFT SEMI JOIN b ON (a.KEY = b.KEY)
于 2012-09-20T14:15:53.457 に答える
0

質問の根底にあるビジネス要件を見ると、時間を使用して Hive テーブルをパーティション分割することで、より効率的な結果が得られる可能性があります。この要素をパーティション キーとして使用するようにデータを書き込むことができる場合、概要を更新するためのクエリははるかに高速になり、必要なリソースも少なくなります。

パーティションは数百万の規模に達すると手に負えなくなる可能性がありますが、これはその制限をいじらないケースのようです.

于 2015-02-28T17:17:33.540 に答える