Hive では、私の理解では、SELECT ...
データ定義 (例 ) ではなく、データ取得クエリ (例) の場合:CREATE TABLES ...
SORT BY
リデューサー内でのみソートするORDER BY
物事を全体的に順序付けするが、すべてを1つのリデューサーに詰め込むCLUSTER BY
キーハッシュによってリデューサーに情報を賢く分配し、ソートする
私の質問は次のとおりです。
CLUSTER BY
世界的な秩序を保証しますか?DISTRIBUTE BY
同じキーを同じリデューサーに入れますが、隣接するキーはどうでしょうか?
これに関して私が見つけることができる唯一の文書はここそして、例から見ると、グローバルに順序付けされているように見えます。しかし、定義からすると、必ずしもそうではないような気がします。
ベストアンサー1
簡単に言うと、あなたの質問に対する答えは次の通りです。
CLUSTER BY
世界的な秩序を保証し ますか?- いいえ。
DISTRIBUTE BY
同じキーを同じリデューサーに入れますが、隣接するキーはどうでしょうか?- ハッシュ関数に依存し、ハッシュ関数はクエリに依存します。
長いバージョン:
Hive を理解するには、まず Map Reduce を理解する必要があります。この質問に関連する Map Reduce の特性は、データが削減段階に到着すると、削減ステップの前に常に mapper または Reducer でシャッフルとソートが行われることです。次に、次のようになります。
ORDER BY x
:x
最後の削減ステップで 1 つのリデューサーを使用することで、データのグローバル順序付けが保証されます。これは、出力が大きい場合は遅くなります。ただし、最後のステップでデータ サイズが小さいことがわかっている限り、大規模なデータセットを処理する場合でも許容されます。(例: フィルタリングと集約の後)SORT BY x
: ローカル順序付けを保証する具体的にはによってx
、N 個のリデューサーのそれぞれで実行されます。グローバル順序は保証されません。DISTRIBUTE BY x
: 同じ分散キーの行がx
同じリデューサーに送られることを保証しますが、希望する順序は保証されません。リデュース段階のデータは依然としてソートされますが、必ずしも によってソートされるわけではありませんx
。CLUSTER BY x
DISTRIBUTE BY x
: これは (および)を実行するのと同じですSORT BY x
。
詳細なメカニズムと構文については公式 wiki を参照してください。https://cwiki.apache.org/confluence/display/Hive/LanguageManual+SortBy
編集済み: コメントや他の回答で述べたように、前の回答は間違っており、単語の選択によって間違ったニュアンスが加わっている可能性があります。 のフレーズの使用はoverlapping-range
誤解を招きます。なぜなら、シャッフルはハッシュ関数で行われるため、必ずしも範囲によるものではないからです。 たとえば、実装によっては、整数を偶数または奇数でハッシュすることは有効ですが、これは数値範囲の点で重複しています。DISTRIBUTE BY
この場合、すべての偶数が同じリデューサーに行き、すべての奇数が別のリデューサーに行くことだけが保証されます。
その他の回答には、小さな間違いがあったり、質問とは関係がなかったり、冗長すぎたりします。