ALTER TABLE 文は、列の追加や削除、テーブル属性の設定など、テーブルスキーマを変更します。サポートされている句は、LindormTable と LindormTSDB で異なります。
エンジンとバージョン
ALTER TABLE 文は LindormTable と LindormTSDB で使用できます。バージョンによる制限はありません。
注意事項
ALTER TABLE 操作は非ロック操作です。この操作中もテーブルは読み書き可能なままです。ただし、以下の理由により、タイムアウトエラーや一時的なパフォーマンスの変動が発生する可能性があります。
-
DDL 操作中、メタデータを再読み込みするために各シャードが短時間閉じられ、再度開かれます。この処理には通常 10 ミリ秒から数百ミリ秒かかります。リクエストが再オープン中のシャードを対象とした場合、わずかな遅延や一時的なパフォーマンスの変動が発生する可能性があります。DDL 操作は、オフピーク時間に実行することを推奨します。
-
DDL 操作の結果は、変更がすべてのシャードに適用された後にのみ返されます。大規模なテーブルの場合、クライアント側のタイムアウト値が短いと、タイムアウトエラーが発生する可能性があります。この操作は、完了するまでサーバー上で実行を継続します。
構文
alter_table_statement ::= ALTER TABLE table_name alter_table_instruction
alter_table_instruction ::=
add_column_list
| DROP COLUMN [ IF EXISTS ] column_name
| SET table_options
| COMPACT (idcName)?
add_column_list ::= ADD [COLUMN] column_def ( ',' ADD [COLUMN] column_def )*
column_def ::= column_name type [TAG]
エンジンによる相違点
ALTER TABLE 文の動作は LindormTable と LindormTSDB で異なります。サポートされている句の比較を次の表に示します。
|
句 |
LindormTable |
LindormTSDB |
|
ADD COLUMN |
サポート |
サポート |
|
COMPACT |
サポート 説明
LindormTable 2.3.4 以降でサポート。 |
非サポート |
|
DROP COLUMN |
サポート 説明
LindormTable 2.6.6 以降でサポート。 |
非サポート |
|
SET table_options |
サポート |
非サポート |
句
ADD COLUMN
LindormTable と LindormTSDB は、どちらも ADD COLUMN 句をサポートしています。
列を追加する際のルールは次のとおりです。
-
プライマリキーとして列を追加することはできません。
-
LindormTSDB の場合、タグ列またはフィールド列のみを追加できます。タイムスタンプ列を追加することはできません。
DROP COLUMN
DROP COLUMN 句は LindormTable 2.6.6 以降でのみ利用可能です。
コンソールでインスタンスを 2.6.6 以降にアップグレードできない場合は、Lindorm のテクニカルサポート (DingTalk ID: s0s3eg3) までお問い合わせください。
DROP COLUMN 操作は非同期です。ALTER TABLE 文が成功すると、システムは直ちに対象の列を削除しますが、列データは COMPACT 操作が完了するまでクリーンアップされません。データのクリーンアップを高速化するには、FLUSH および COMPACT 操作を手動で実行できます。データが完全にクリーンアップされるまで、同じ名前の列を追加することはできません。詳細については、「FAQ」をご参照ください。
SET table_options
LindormTable のみが SET table_options 句をサポートしています。
テーブル属性の一覧については、「テーブル属性」をご参照ください。SHOW TABLE VARIABLES 文を使用して、テーブル属性が正常に設定されたことを確認できます。詳細については、「SHOW TABLE VARIABLES」をご参照ください。
MUTABILITY および CONSISTENCY 属性を変更する際は、次の点にご注意ください。
-
インデックスを作成する前は、MUTABILITY と CONSISTENCY の両方を変更できます。
-
インデックスを作成した後:
-
MUTABILITY は変更できません。
-
CONSISTENCY の値は
eventualからstrongに変更できますが、strongからeventualには変更できません。
-
例については、「動的列の有効化」をご参照ください。
COMPACT
COMPACT 句は LindormTable 2.3.4 以降でのみサポートされており、メジャーコンパクションをトリガーします。
メジャーコンパクションを実行すると、データファイルがマージされ、削除済みまたは期限切れのデータがクリアされ、ディスク領域が解放され、読み書きのパフォーマンスが向上します。この操作はリソースを大量に消費します。
-
idcNameを指定しない場合:-
シングルゾーンインスタンスには IDC が 1 つしかないため、
idcNameを指定しても効果はありません。 -
マルチゾーンインスタンスには 2 つの IDC があり、
idcNameを指定しない場合は次のルールに従います。-
LindormTable のバージョンが 2.6.4.2 より前の場合、メジャーコンパクションは
idc1でのみ実行されます。 -
LindormTable のバージョンが 2.6.4.2 以降の場合、デフォルトですべての IDC でメジャーコンパクションが実行されます。
-
-
-
idcNameを指定すると、指定した IDC でメジャーコンパクションが実行されます。複数の IDC 名をカンマ (,) で区切って指定できます。
例については、「メジャーコンパクションの実行」をご参照ください。
例
このセクションの例では、「CREATE TABLE」のトピックで次の文を使用して作成された sensor テーブルを使用します。
CREATE TABLE sensor (
device_id VARCHAR NOT NULL,
region VARCHAR NOT NULL,
time BIGINT NOT NULL,
temperature DOUBLE,
humidity BIGINT,
PRIMARY KEY(device_id, region, time)
);
列の追加
sensor テーブルに新しい列 n1 を追加します。
ALTER TABLE sensor ADD COLUMN n1 DOUBLE;
時空間データテーブル roads に時空間列を追加します。
-
空間列を 1 つ追加します。
ALTER TABLE roads ADD COLUMN g2 GEOMETRY(LINESTRING); -
複数の空間列を追加します。
ALTER TABLE roads ADD COLUMN g2 GEOMETRY(LINESTRING), g3 GEOMETRY(POLYGON);
列の削除
テーブル sensor から列 n1 を削除します。
ALTER TABLE sensor DROP COLUMN IF EXISTS n1;
結果の確認
次の文を実行して結果を確認します。
DESCRIBE table sensor;
動的列の有効化
sensor テーブルの動的列機能を有効にします。
ALTER TABLE sensor SET DYNAMIC_COLUMNS = 'true';
動的列の詳細については、「動的列」をご参照ください。
テーブルの整合性の設定
時空間データテーブル roads の整合性を設定します。
ALTER TABLE roads SET 'CONSISTENCY' = 'strong';
TTL の設定
-
sensorテーブルの TTL を秒 (s) 単位で設定します。ALTER TABLE sensor SET TTL = '2592000'; -
sensorテーブルから TTL を削除します。ALTER TABLE sensor SET TTL = '';結果の確認
クラスター管理システムで、Overview ページに移動します。対象データベース配下にある対象のテーブル名をクリックします。[現在のテーブル詳細] セクションで、[TTL] パラメーターの値を確認します。クラスター管理システムへのアクセス方法については、「クラスター管理システムへのログオン」をご参照ください。
圧縮アルゴリズムの設定
-
sensorテーブルの圧縮アルゴリズムをZSTDに設定します。ALTER TABLE sensor SET COMPRESSION = 'ZSTD'; -
sensorテーブルの圧縮アルゴリズムをNONEに設定します。ALTER TABLE sensor SET COMPRESSION = 'NONE';結果の確認
クラスター管理システムで、Overview ページに移動し、対象データベース配下にある対象のテーブル名をクリックします。[現在のテーブル詳細] セクションで、[テーブルプロパティの表示] をクリックして [COMPRESSION] パラメーターの値を確認します。
ホット/コールドデータ分離の設定
ホット/コールドデータ分離の詳細については、「ホット/コールドデータ分離の概要」をご参照ください。
ホット/コールドデータの境界の設定
取り込みタイムスタンプ
sensor テーブルのホット/コールドデータの境界を設定します。LindormTable は、各行の取り込みタイムスタンプに基づいて、データをキャパシティストレージにアーカイブするかどうかを決定します。
-- sensor テーブルで取り込みタイムスタンプに基づいてホット/コールドデータ分離を有効にし、境界を 1 日に設定します。
ALTER TABLE sensor SET CHS = '86400', CHS_L2 = 'storagetype=COLD';
結果の確認
SHOW TABLE VARIABLES FROM sensor LIKE 'CHS%'; 文を実行して、CHS および CHS_L2 パラメーターの値を確認できます。SHOW VARIABLES の構文の詳細については、「SHOW VARIABLES」をご参照ください。
カスタム時間列
カスタム時間列に基づくデータ分離には制限があります。この機能を使用する前に、「注意事項」をご確認ください。
カスタム時間列 time を sensor テーブルのホット/コールドデータの境界として設定します。LindormTable は、各行の time 列のイベントタイムスタンプに基づいて、データをキャパシティストレージにアーカイブするかどうかを決定します。
-- sensor テーブルでカスタム列に基づいてホット/コールドデータ分離を有効にし、境界を 1 日に設定し、time 列を使用します。
ALTER TABLE sensor SET CHS ='86400', CHS_L2 = 'storagetype=COLD', CHS_COLUMN = 'COLUMN=time';
結果の確認
SHOW TABLE VARIABLES FROM sensor LIKE 'CHS%'; 文を実行して、CHS、CHS_L2、および CHS_COLUMN パラメーターの値を確認できます。SHOW VARIABLES の構文の詳細については、「SHOW VARIABLES」をご参照ください。
ホット/コールドデータの境界の削除
センサーテーブルのホットデータとコールドデータの境界を削除します。
ALTER TABLE sensor SET CHS = '', CHS_L2 = '';
結果の確認
SHOW TABLE VARIABLES FROM sensor LIKE 'CHS%'; 文を実行して、CHS および CHS_L2 パラメーターの値を確認できます。SHOW VARIABLES の構文の詳細については、「SHOW VARIABLES」をご参照ください。
メジャーコンパクションの実行
-
センサーテーブルのメジャーコンパクションを実行します。
ALTER TABLE sensor COMPACT;説明マルチゾーンインスタンスの場合、次のルールにご注意ください。
-
LindormTable のバージョンが 2.6.4.2 より前の場合、IDC を指定しないと、システムはデフォルトで
idc1でメジャーコンパクションを実行します。 -
LindormTable のバージョンが 2.6.4.2 以降の場合、システムはデフォルトですべての IDC でメジャーコンパクションを実行します。
-
-
idc2でメジャーコンパクションを実行します。ALTER TABLE sensor COMPACT 'idc2'; -
idc1とidc2でメジャーコンパクションを実行します。ALTER TABLE sensor COMPACT 'idc1,idc2';