8

ハイブ テーブルが 1 つの列でクラスター化されると、そのバケット化された列のハッシュ関数が実行され、そのデータ行がバケットの 1 つに入れられることを理解しています。そして、バケットごとにファイルがあります。つまり、32 個のバケットがある場合、hdfs には 32 個のファイルがあります。

を複数の列でクラスター化するとはどういう意味ですか? たとえば、テーブルに CLUSTERED BY (continent, country) INTO 32 BUCKETS があるとします。

複数の列がある場合、ハッシュ関数はどのように実行されますか?

いくつのファイルが生成されますか? これまだ32歳?

4

2 に答える 2

7
  1. はい、ファイル数は 32 のままです。
  2. ハッシュ関数は、"continent,country" を単一の文字列と見なして動作し、これを入力として使用します。

それが役に立てば幸い!!

于 2015-06-17T15:58:39.790 に答える
0

一般に、バケット番号は式 hash_function(bucketing_column) mod num_buckets によって決定されます。(そこにも '0x7FFFFFFF がありますが、それはそれほど重要ではありません)。hash_function は、バケット列のタイプによって異なります。int の場合は、hash_int(i) == i と簡単です。たとえば、user_id が int で、バケットが 10 個ある場合、0 で終わるすべての user_id はバケット 1 にあり、1 で終わるすべての user_id はバケット 2 にある、などと予想されます。他のデータ型の場合は、少しトリッキーです。特に、BIGINT のハッシュは BIGINT と同じではありません。また、文字列または複雑なデータ型のハッシュは、値から派生した数値になりますが、人間が認識できるものではありません。たとえば、user_id が STRING の場合、バケット 1 の user_id はおそらく 0 で終わることはありません。一般に、

参照: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL+BucketedTables

于 2015-06-16T18:20:58.963 に答える