ここでは、テーブルパーティションの追加、削除、変更コマンドについて説明します。

パーティションの追加

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, ...)
  • パーティションの列名は変更できません。 列の値のみ変更できます。
  • マルチレベルのパーティションの値を変更するには、レベルごとにパーティション値を上書きする必要があります。