0

次のコマンドを使用して、ハイブにバケットを作成しようとしています:

hive> create table emp( id int, name string, country string)
 clustered by( country)
row format delimited
fields terminated by ','
stored as textfile ;

コマンドは正常に実行されています: このテーブルにデータをロードすると、正常に実行され、使用時にすべてのデータが表示されselect * from empます。

ただし、HDFS では 1 つのテーブルのみが作成され、すべてのデータを含む 1 つのファイルのみが存在します。つまり、特定の国レコード用のフォルダーはありません。

4

1 に答える 1

1

まず、DDL ステートメントで、必要なバケット数を明示的に指定する必要があります。

create table emp( id int, name string, country string)
 clustered by( country)
INTO 2 BUCKETS
row format delimited
fields terminated by ','
stored as textfile ;

上記のステートメントでは、2 つのバケットについて言及していますが、同様に、任意の数を言及することができます。

まだ終わりではありません!!

その後、データをテーブルにロードする際に、ハイブするための以下のヒントにも言及する必要があります。

set hive.enforce.bucketing = true;  

それはそれを行う必要があります。

この後、テーブル ディレクトリの下に作成されたファイルの数が、DDL ステートメントに記載されているバケットの数と同じであることを確認できるはずです。

バケット化では HDFS フォルダーは作成されません。国ごとに別のフローダーを作成する場合は、PARTITION する必要があります。

ハイブのパーティショニングとバケット化について詳しく調べてください。

于 2015-04-06T07:10:07.127 に答える