9

こんにちは、私はハイブに非常に慣れていません.hadoopでバケットの概念を実行しましたが、以下の行を理解できませんでした.誰かがこれについて私を助けることができますか?

SELECT avg(viewTime)
 FROM page_view TABLESAMPLE(BUCKET 1 OUT OF 32);

TABLESAMPLE の一般的な構文は、TABLESAMPLE(BUCKET x OUT OF y) です。

クエリのサンプル サイズは約 1/y です。さらに、y は、テーブルの作成時にテーブルに指定されたバケット数の倍数または因数である必要があります。たとえば、y を 16 に変更すると、クエリは次のようになります。

SELECT avg(viewTime)
 FROM page_view TABLESAMPLE(BUCKET 1 OUT OF 16);

この場合、サンプル サイズには 16 ユーザーごとに約 1 人が含まれます (バケット列はユーザ​​ー ID であるため)。テーブルにはまだ 32 個のバケットがありますが、Hive はバケット 1 と 17 を一緒に処理することにより、このクエリを満たすことを試みます。一方、y が 64 に指定されている場合、Hive は 1 つのバケット内のデータの半分に対してクエリを実行します。x の値は、使用するバケットを選択するためにのみ使用されます。真にランダムなサンプリングでは、その値は重要ではありません。

4

1 に答える 1

15

わからない部分は?

テーブルを作成し、clustered by句を使用して (例として) 32 個のバケットにバケット化すると、Hive は決定論的ハッシュ関数を使用してデータを 32 個のバケットにバケット化します。次に、 を使用すると、ハイブはバケットをy個のバケットTABLESAMPLE(BUCKET x OUT OF y)のグループに分割し、各グループのx番目のバケットを選択します。例えば:

  • を使用するTABLESAMPLE(BUCKET 6 OUT OF 8)と、ハイブは 32 個のバケットを 8 個のバケットのグループに分割し、結果として 8 個のバケットの 4 つのグループが作成され、各グループの 6 番目のバケットが選択されるため、バケット 6、14、22、30 が選択されます。

  • を使用するTABLESAMPLE(BUCKET 23 OUT OF 32)と、ハイブは 32 個のバケットを 32 個のグループに分割し、結果として 32 個のバケットの 1 つのグループのみになり、結果として 23 番目のバケットを選択します。

  • を使用するTABLESAMPLE(BUCKET 3 OUT OF 64)と、ハイブは 32 個のバケットを 64 個のバケットのグループに分割し、64 個の「ハーフ バケット」の 1 つのグループを作成してから、3 番目のフル バケットに対応するハーフ バケットを選択します。

于 2014-08-12T21:20:24.930 に答える