`ALTER TABLE` 文は、テーブルのスキーマを変更します。たとえば、この文を使用して、列の追加や削除、テーブル属性の設定ができます。このトピックでは、`LindormTable` と `LindormTSDB` で `ALTER TABLE` 文を使用する方法について説明します。
エンジンとバージョン
`ALTER TABLE` 構文は、すべてのバージョンの `LindormTable` と `LindormTSDB` で使用できます。
注意事項
`ALTER TABLE` 操作はテーブルをロックしません。データ定義言語 (DDL) 操作中も、テーブルは読み取り可能かつ書き込み可能です。ただし、以下の理由により、タイムアウトエラー、軽微なジッター、またはグリッチが発生する場合があります:
DDL 操作中、各シャードはメタデータを再読み込みするためにシャットダウンされ、その後再度開かれます。このプロセスは短く、通常は 10 ms から数百ミリ秒続きます。シャードが再度開かれている間にリクエストが送信されると、そのリクエストで軽微なジッターやグリッチが発生する可能性があります。DDL 操作はオフピーク時間に実行することを推奨します。
DDL 操作は、すべてのシャードが変更された後にのみ結果を返します。大きなテーブルで 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]相違点
次の表は、`LindormTable` と `LindormTSDB` における `ALTER TABLE` 構文の主な相違点を比較したものです。
構文要素 | 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` の場合、追加できるのはタグ列 (TAG) とフィールド列 (FIELD) のみです。タイムスタンプ列は追加できません。
DROP COLUMN (列の削除)
`DROP COLUMN` は `LindormTable` 2.6.6 以降でのみサポートされています。
コンソールでインスタンスを `LindormTable` 2.6.6 以降にアップグレードできない場合は、`Lindorm` のテクニカルサポート (DingTalk ID: s0s3eg3) にご連絡ください。
DROP COLUMN 操作は非同期です。 ALTER TABLE 文が正常に実行されると、システムはすぐに対象の列を削除します。 ただし、列内のデータは、システムが COMPACT 操作を完了した後にクリアされます。 データのクリーンアップ処理を高速化するには、手動で FLUSH 操作と COMPACT 操作を実行できます。 データがクリアされるまで、同じ名前の列を追加することはできません。 詳細については、「よくある質問」をご参照ください。
SET table_options (テーブル属性の設定)
`SET table_options` は `LindormTable` のみでサポートされています。
テーブル属性のリストについては、「テーブル属性」をご参照ください。SHOW TABLE VARIABLES 文を実行して、テーブル属性が設定されていることを確認できます。詳細については、「SHOW TABLE VARIABLES」をご参照ください。
`MUTABILITY` および `CONSISTENCY` 属性を変更する際は、次の点にご注意ください:
インデックスを作成する前は、`MUTABILITY` と `CONSISTENCY` の両方を変更できます。
インデックスを作成した後:
`MUTABILITY` は変更できません。
CONSISTENCY の値は
eventualからstrongにのみ変更できます。strongからeventualには変更できません。
例については、「動的カラムの有効化」をご参照ください。
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` トピックの文を使用して作成されたサンプルテーブルに基づいています。
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 に時空間列を追加します。
単一の時空間列を追加します。
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 = '';結果の確認
クラスター管理システムの [概要] ページで、対象のデータベース名をクリックし、次に対象のテーブルをクリックします。 [現在のテーブル詳細] エリアで、ttl パラメーターの値を確認します。 クラスター管理システムへのログイン方法については、「クラスター管理システムにログインする」をご参照ください。
圧縮アルゴリズムの設定
sensorテーブルの圧縮アルゴリズムをZSTDに設定します。ALTER TABLE sensor SET COMPRESSION = 'ZSTD';sensorテーブルの圧縮アルゴリズムをNONEに設定します。ALTER TABLE sensor SET COMPRESSION = 'NONE';結果の確認
クラスター管理システムの [概要] ページで、対象のデータベース名、次に対象のテーブルの順にクリックし、[現在のテーブル詳細] エリアで [テーブルプロパティの表示] をクリックして 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」をご参照ください。
コールドデータとホットデータの境界のキャンセル
`sensor` テーブルのコールドデータとホットデータの境界をキャンセルします。
ALTER TABLE sensor SET CHS = '', CHS_L2 = '';結果の確認
SHOW TABLE VARIABLES FROM sensor LIKE 'CHS%'; 文を実行して、CHS および CHS_L2 パラメーターの値を確認できます。SHOW VARIABLES 文の詳細については、「SHOW VARIABLES」をご参照ください。
メジャーコンパクションの実行
`sensor` テーブルでメジャーコンパクションを実行します。
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';