Hive パーティションとバケットの例
テーブル、パーティション、およびバケットは、Hive データ モデリングの一部です。
パーティションとは何ですか?
Hive パーティションは、パーティション キーに基づいてテーブルをさまざまな部分に分割することにより、テーブルをパーティションに編成する方法です。
パーティションは、テーブルに XNUMX つ以上のパーティション キーがある場合に役立ちます。 パーティション キーは、データをテーブルに格納する方法を決定するための基本要素です。
次に例を示します。: -
「クライアントは、インドの事業に属する電子商取引データをいくつか持っており、その中には各州 (38 州) の事業が全体として記載されています。州列をパーティション キーとして、インドのデータ全体をパーティション化すると、インドにある州の数 (38) と同じ数のパーティション (38 パーティション) を取得できます。これにより、各州のデータはパーティション テーブルで個別に表示できます。
パーティションのサンプル コード スニペット
- 全状態テーブルの作成
create table all states(state string, District string,Enrolments string) row format delimited fields terminated by ',';
- 作成したテーブルにデータをすべての状態でロードする
Load data local inpath '/home/hduser/Desktop/AllStates.csv' into table allstates;
- パーティションテーブルの作成
create table state_part(District string,Enrolments string) PARTITIONED BY(state string);
- パーティションの場合、このプロパティを設定する必要があります
set hive.exec.dynamic.partition.mode=nonstrict
- パーティションテーブルへのデータのロード
INSERT OVERWRITE TABLE state_part PARTITION(state) SELECT district,enrolments,state from allstates;
- パーティションキーとしての状態に基づいた実際の処理とパーティションテーブルの形成
- HDFS ストレージには、ファイル名が状態名である 38 個のパーティション出力が存在します。 このステップでこれを確認します
次のスクリーンショットは、上記のコードの実行を示しています。
上記のコードから、次のことを行います
- 州、地区、登録などの 3 つの列名を持つすべての州のテーブルの作成
- すべての状態のテーブルにデータをロードする
- 状態をパーティションキーとして使用するパーティションテーブルの作成
- このステップでは、パーティション モードを非厳密に設定します (このモードは動的パーティション モードを有効にします)。
- パーティション tablestate_part へのデータのロード
- パーティションキーとしての状態に基づいた実際の処理とパーティションテーブルの形成
- ファイル名を状態名として HDFS ストレージに 38 個のパーティション出力が行われます。 このステップではこれを確認します。 このステップでは、HDFS の 38 個のパーティション出力を確認します。
バケットとは何ですか?
ハイブのバケットは、ハイブのテーブルデータを複数のファイルまたはディレクトリに分離するために使用されます。 効率的なクエリのために使用されます。
- パーティションに存在するデータは、さらにバケットに分割できます。
- 除算は、テーブル内で選択した特定の列のハッシュに基づいて実行されます。
- バケットは、バックエンドで何らかの形式のハッシュ アルゴリズムを使用して各レコードを読み取り、バケットに配置します。
- Hive では、次を使用してバケットを有効にする必要があります。 set.hive.enforce.bucketing=true;
ステップ1) 以下のようにバケットを作成します。
上のスクリーンショットより
- first_name、job_id、部署、給与、国などの列名を使用してサンプルバケットを作成しています。
- ここでは 4 つのバケットを作成しています。
- データが自動的にロードされたら、データを 4 つのバケットに配置します
ステップ2) テーブルサンプルバケットへのデータのロード
Hive システムに「Employees テーブル」がすでに作成されていると仮定します。 このステップでは、employees テーブルからテーブル サンプル バケットへのデータのロードを確認します。
従業員データをバケットに移動する前に、データが first_name、job_id、部署、給与、国などの列名で構成されていることを確認してください。
ここでは、employees テーブルからサンプル バケットにデータをロードしています。
ステップ3)ステップ 4 で作成した 1 つのバケットを表示する
上のスクリーンショットから、employees テーブルのデータがステップ 4 で作成した 1 つのバケットに転送されていることがわかります。