ここでは、テーブルパーティションの追加、削除、変更コマンドについて説明します。
パーティションの追加
SQL 文の形式
ALTER TABLE TABLE_NAME ADD [IF NOT EXISTS] PARTITION partition_spec
partition_spec:(partition_col1 = partition_col_value1, partition_col2 = partiton_col_value2, ...)
注
- パーティション名は、小文字にする必要があります。
- 実行できるのは、’パーティションの作成’ だけです。’パーティション列の作成’ は実行できません。
- 同じ名前のパーティションが既に存在する場合、[if not exists] オプションが指定されていないと、例外が返されます。
- 1 つの MaxCompute テーブル内に作成できるパーティションの最大数は、60,000 です。
- マルチレベルのパーティションテーブルの場合、新しいパーティションを追加するには、すべてのパーティション値を指定する必要があります。
例:
‘sale_detail’ テーブルに新しいパーティションを追加します。
alter table sale_detail add if not exists partition (sale_date='201312', region='hangzhou');
-- 2013 年 12 月の杭州 (hangzhou) リージョンにおける売上詳細を保存するパーティションが追加されます。
alter table sale_detail add if not exists partition (sale_date='201312', region='shanghai');
-- 2013 年 12 月の上海 (shanghai) リージョンにおける売上詳細を保存するパーティションが追加されます。
alter table sale_detail add if not exists partition(sale_date='20111011');
-- パーティション sale_date のみを指定すると、エラーが返されます。
alter table sale_detail add if not exists partition(region='shanghai');
-- パーティション region のみを指定すると、エラーが返されます。
パーティションの削除
パーティションの削除構文の形式は、次のとおりです。
ALTER TABLE TABLE_NAME DROP [IF EXISTS] PARTITION partition_spec;
partition_spec:(partition_col1 = partition_col_value1, partition_col2 = partiton_col_value2, ...)
注 パーティションが存在しない場合、オプション [if exists] が指定されていないと、エラーが返されます。
例:
sale_detail テーブルからパーティションを削除します。
alter table sale_detail drop if exists partition(sale_date='201312',region='hangzhou');
-- -2013 年 12 月の杭州 (Hangzhou) の売上詳細が削除されます。
列の追加
SQL 文の形式
ALTER TABLE table_name ADD COLUMNS (col_name1 type1, col_name2 type2...)
ALTER TABLE table_name ADD COLUMNS (col_name1 type1 comment 'XXX',col_name2 type2 comment 'XXX');
注 新規列の順番は指定できません。 デフォルトでは、新規列は最後の列になります。
列名の変更
SQL 文の形式
ALTER TABLE table_name CHANGE COLUMN old_col_name RENAME TO new_col_name;
注
- ’old_col_name’ は、既存の列を示します。
- テーブル内に ’new_col_name’ という名前の列は存在できません。
列やパーティションのコメントの変更
列やパーティションのコメントを変更する SQL 文は、次のとおりです。
ALTER TABLE table_name CHANGE COLUMN col_name COMMENT comment_string;
注 コメントは、1024 バイト以内にする必要があります。
列名と列コメントの同時変更
SQL 文の形式
ALTER TABLE table_name CHANGE COLUMN old_col_name new_col_name column_type COMMENT column_comment;
注
- ’old_col_name’ は既存の列でなければなりません。
- テーブル内に ’new_col_name’ という名前の列は存在できません。
- コメントは、1024 バイト以内にする必要があります。
テーブル/パーティションの LastDataModifiedTime の変更
MaxCompute MaxCompute SQL では、’touch’ 操作を使用して、パーティションの LastDataModifiedTime を変更できます。 この操作を実行すると、パーティションの ’LastDataModifiedTime’ は、現在の時刻に変更されます。
SQL 文の形式
ALTER TABLE table_name TOUCH PARTITION(partition_col='partition_col_value', ...)
注
- ’table_name’ または ’partition_col’ が存在しない場合は、エラーが返されます。
- 指定した partition_col_value が存在しない場合は、エラーが返されます。
- この操作でテーブルの ’LastDataModifiedTime’ の値を変更すると、MaxCompute はテーブルまたはパーティションのデータが変更されたとみなし、ライフサイクルを計算し直します。
パーティション値の変更
MaxCompute SQL では、'rename' 操作により、パーティションの値を変更できます。
SQL 文の形式
ALTER TABLE table_name PARTITION (partition_col1 = partition_col_value1, partition_col2 = partiton_col_value2, ...)
RENAME TO PARTITION (partition_col1 = partition_col_newvalue1, partition_col2 = partiton_col_newvalue2, ...)
注
- パーティションの列名は変更できません。 列の値のみ変更できます。
- マルチレベルのパーティションの値を変更するには、レベルごとにパーティション値を上書きする必要があります。