DLC パーティションテーブル
ユーザーはデータをパーティション・ディレクトリ方式で保存でき、異なる特徴のデータを別々のディレクトリに格納できます。データ探索時にwhere条件でパーティションをフィルタリングすると、DLCのデータスキャン量が大幅に減少し、クエリ効率が向上します。
注意:
同じテーブルのパーティションは同じデータ型と形式を使用する必要があります。
DLC 内部テーブルは隠しパーティション方式を採用しており、パーティション・ディレクトリ構造を気にする必要がありません。
パーティションテーブルを作成
テーブル作成文でPARTITIONED BYを使用してパーティションフィールドを指定します。
例:パーティションテーブルtest_partを作成
CREATE EXTERNAL TABLE IF NOT EXISTS `DataLakeCatalog`.`test_a_db`.`test_part` (
`_c0` int,
`_c1` int,
`_c2` string,
`dt` string
) USING PARQUET PARTITIONED BY (dt) LOCATION 'cosn://testbucket/data/';
パーティションを追加
alter table add partitionを使用してパーティションを追加
ユーザーのデータパーティションディレクトリがHiveのパーティションルール(パーティション列名=パーティション列値)に従っている場合、この方法でパーティションを追加できます。ディレクトリの構成方法は以下の図の通りです。
ALTER TABLE `DataLakeCatalog`.`test_a_db`.`test_part` add PARTITION (dt = '202206')
ALTER TABLE `DataLakeCatalog`.`test_a_db`.`test_part` add PARTITION (dt = '202207')
ALTER TABLE `DataLakeCatalog`.`test_a_db`.`test_part` add PARTITION (dt = '202208')
ALTER TABLE `DataLakeCatalog`.`test_a_db`.`test_part` add PARTITION (dt = '202209')
ALTER TABLE `DataLakeCatalog`.`test_a_db`.`test_part` add PARTITION (dt = '202210')
alter tableを使用してlocationを指定し、パーティションを追加します
ユーザーのデータが通常のcosディレクトリ(「パーティション列名=パーティション列値」形式ではない)で構成されている場合、add partition時にディレクトリを指定できます。
SQLリファレンス:
ALTER TABLE `DataLakeCatalog`.`test_a_db`.`test_part` add PARTITION (dt = '202211') LOCATION='cosn://testbucket/data2/202211'
ALTER TABLE `DataLakeCatalog`.`test_a_db`.`test_part` add PARTITION (dt = '202212') LOCATION='cosn://testbucket/data2/202212'
MSCK REPAIRを使用してパーティションを自動的に追加する
MSCK REPAIR TABLE ステートメントを使用して、テーブル作成時に指定されたデータディレクトリをスキャンします。新しいパーティションディレクトリが存在する場合、システムは自動的にこれらのパーティションをデータテーブルのメタデータ情報に追加します。
SQLリファレンス:
MSCK REPAIR TABLE `DataLakeCatalog`.`test_a_db`.`test_part`
パーティションを追加するには、alter table 方式を優先的に選択することをお勧めします。msck repair を使用してパーティションを自動的に追加する場合、以下の制約条件があります:
MSCK REPAIR TABLE はデータテーブルのメタデータにパーティションを追加するだけで、パーティションを削除することはありません。
データ量が大きい場合、MSCK REPAIR TABLE の使用は推奨されません。この方法はすべてのデータをスキャンするため、タイムアウトが発生する可能性があります。
パーティションのディレクトリがHiveのパーティションルール(パーティション列名=パーティション列値)に従っていない場合、MSCK REPAIR TABLE方式を採用することはできません。