目次
3. 従業員テーブルに抽出する動的フィールド データとして emp_name を使用します。
序文:
Hive におけるパーティショニングとは、ビジネス ニーズに応じて大きなテーブルのデータを複数のディレクトリに格納することであり、各ディレクトリはテーブルのパーティションと呼ばれます。クエリを実行する場合、where 句の式を使用してクエリに必要なパーティションを選択すると、クエリの効率が大幅に向上し、データのクエリをより速く実行できるようになります。
パーティションには静的パーティションと動的パーティションがあります
静的パーティション:
静的パーティション:テーブルの作成後に作成され、パーティション キーの値を手動で指定できます (値を直接指定します)。静的パーティション分割は通常、データ量が比較的固定されており、パーティション情報が頻繁に変更されないシナリオで使用されます。テーブルを作成するときは、partitioned by ステートメントを使用してパーティション キーを指定できます。例は次のとおりです。
CREATE TABLE employee (
emp_id INT,
emp_name STRING,
emp_date STRING,
emp_salary FLOAT
)
PARTITIONED BY (emp_dept STRING);
データを作成して挿入します。
1. パーティションを作成する
alter table 従業員追加パーティション(emp_dept='20230920');
alter table 従業員追加パーティション(emp_dept='20230910');
alter table 従業員追加パーティション(emp_dept='20230912');
alter table 従業員追加パーティション(emp_dept='20230917');
2. パーティションの削除
alter table 従業員ドロップパーティション (emp_dept='20230910');
alter table 従業員ドロップパーティション (emp_dept='20230920');
alter table 従業員ドロップパーティション (emp_dept='20230914');
3. パーティションにデータを挿入します
他のテーブルからデータを挿入し、間隔を定義する
gh_test.employee パーティションに挿入 (emp_dept='20230914') select * from v where emp_date='2023-09-14'
4. パーティションテーブルデータの表示
select * from gh_test.employee where emp_dept='20230914'
動的パーティショニング:
動的パーティショニング:
これは、パーティションのフィールド値がクエリ結果に基づいて自動的に推測され (パーティションに直接値が与えられるわけではありません)、挿入には Insert Select ステートメントが使用されることを意味します。
動的パーティショニングは通常、データ量が多く、データのインポートに応じてパーティション情報を変更する必要があるシナリオで使用されます。データを挿入するときに、
まず動的パーティショニングを有効にします。
# 表示开启动态分区 set hive.exec.dynamic.partition=true; set hive.exec.dynamic.partition.mode=nostrict;
2. v テーブルのソース データを表示する
3. 従業員テーブルに抽出する動的フィールド データとして emp_name を使用します。
insert overwrite table gh_test.employee partition (emp_dept) //先声明不定义值 select v1.*,v1.emp_name from v as v1 //v1.emp_name 为分区值(可以理解为以这个emp_name字段进行了分区)
4. パーティション結果の表示
show partition gh_test.employee
要約する
静的パーティショニングと動的パーティショニングにはそれぞれ利点と欠点があり、実際の状況に応じて選択する必要があります。静的パーティショニングではクエリの効率が向上しますが、パーティション情報を手動で保守する必要があります。動的パーティショニングではパーティション情報を自動的に保守できますが、大量のデータのインポートに時間がかかる可能性があります。