Tablestore の DDL 操作は、既存のデータテーブルまたは検索インデックスに SQL マッピングを作成し、マッピングテーブルのスキーマとメタデータを管理します。
DDL ステートメントの概要
ステートメント | エンジン | 説明 |
CREATE TABLE | tablestore | データテーブルのマッピングを作成します。SQL エンジンは、クエリに最適なインデックスを自動的に選択します。 |
CREATE TABLE | searchindex | 検索インデックスのマッピングを作成します。SQL エンジンは、指定された検索インデックスを介してクエリを実行します。 |
ALTER TABLE | - | 既存のマッピングテーブルに属性列を追加または削除します。 |
DROP MAPPING TABLE | - | 元のデータテーブルやインデックスに影響を与えることなく、マッピングを削除します。 |
DESCRIBE | - | マッピングテーブルのフィールド名、データ型、プライマリキーフラグ、NULL 許容性を返します。 |
SHOW INDEX | - | マッピングテーブルに関連付けられているプライマリキー、セカンダリインデックス、検索インデックスなどのインデックス情報を返します。 |
SHOW TABLES | - | 現在のインスタンス内のすべてのマッピングテーブルを一覧表示します。 |
従来のリレーショナルデータベースとは異なり、Tablestore の CREATE TABLE は物理テーブルを作成しません。代わりに、既存のデータテーブルまたは検索インデックスへの SQL アクセスマッピングを作成します。DROP MAPPING TABLE はマッピングのみを削除し、元のデータはそのまま残ります。
データテーブルマッピングの作成
CREATE TABLE ステートメントで ENGINE='tablestore' を指定すると、既存のデータテーブルのマッピングが作成されます。マッピングが作成されると、SQL エンジンは自動的に最適なインデックス (プライマリキー、セカンダリインデックス、または検索インデックス) を選択してクエリを実行します。
構文
CREATE TABLE [IF NOT EXISTS] table_name(
column_name data_type [NOT NULL | NULL], ...
PRIMARY KEY(key_part [, key_part])
)
ENGINE='tablestore',
ENGINE_ATTRIBUTE='{"consistency": consistency [,"allow_inaccurate_aggregation": allow_inaccurate_aggregation]}';プライマリキー列が 1 つのテーブルの場合は、列定義で PRIMARY KEY を直接指定します。
CREATE TABLE [IF NOT EXISTS] table_name(
column_name data_type PRIMARY KEY,
column_name data_type [NOT NULL | NULL], ...
)
ENGINE='tablestore',
ENGINE_ATTRIBUTE='{"consistency": consistency}';パラメーター
パラメーター | 必須 | 説明 |
IF NOT EXISTS | いいえ | 指定した場合、マッピングテーブルがすでに存在していてもエラーは返されません。指定しない場合、 |
table_name | はい | マッピングテーブル名。この名前はデータテーブル名と一致する必要があります。 |
column_name | はい | 列名。SQL の列名は、データテーブルの列名と一致する必要があります (大文字と小文字は区別されません)。たとえば、データテーブルの列が |
data_type | はい | 列の SQL データ型。データ型は、データテーブルの列のデータ型と一致する必要があります。プライマリキー列は BIGINT、VARCHAR (1024)、VARBINARY (1024) のみをサポートします。属性列は、これらに加えて DOUBLE、BOOL、MEDIUMTEXT、MEDIUMBLOB をサポートします。完全な型マッピングについては、「SQL のデータ型マッピング」をご参照ください。 |
NOT NULL | NULL | いいえ | 列が NULL 値を許可するかどうかを指定します。プライマリキー列のデフォルトは NOT NULL です。属性列のデフォルトは NULL です。値が必須の属性列には NOT NULL を指定します。 |
PRIMARY KEY | はい | プライマリキーの定義。プライマリキーは、順序と型の両方でデータテーブルのプライマリキー列と一致する必要があります。 |
ENGINE | いいえ | 実行エンジンの種類。デフォルトは |
consistency | いいえ | クエリ結果の整合性レベル。有効な値: |
allow_inaccurate_aggregation | いいえ | クエリパフォーマンスと引き換えに集計の精度を犠牲にするかどうかを指定します。デフォルトは |
例
プライマリキー列 colvalue (VARCHAR) と id (BIGINT)、および属性列 content (MEDIUMTEXT) を持つ exampletable のマッピングを作成します。
CREATE TABLE exampletable(colvalue VARCHAR (1024), id BIGINT, content MEDIUMTEXT, PRIMARY KEY(colvalue, id)) ENGINE='tablestore';強力な整合性を持つマッピングを作成します。
CREATE TABLE exampletable2(id BIGINT (20), colvalue VARCHAR (1024), content MEDIUMTEXT, PRIMARY KEY(colvalue, id)) ENGINE_ATTRIBUTE='{"consistency": "strong"}';検索インデックスマッピングの作成
既存の検索インデックスのマッピングを作成するには、CREATE TABLE ステートメントで ENGINE='searchindex' を使用します。マッピングが作成されると、SQL エンジンはすべてのクエリを指定された検索インデックスを介して実行します。
ユースケース
全文検索、ベクトル検索、ネスト型クエリなどの検索インデックス機能が必要な場合。
SQL エンジンによる自動的なインデックス選択に頼るのではなく、クエリのルーティングを特定の検索インデックスに固定する必要がある場合。
構文
CREATE TABLE [IF NOT EXISTS] user_defined_name(
column_name data_type [, column_name data_type]
)
ENGINE='searchindex',
ENGINE_ATTRIBUTE='{"index_name": index_name, "table_name": table_name}';パラメーター
パラメーター | 必須 | 説明 |
IF NOT EXISTS | いいえ | 指定した場合、マッピングテーブルがすでに存在していてもエラーは返されません。 |
user_defined_name | はい | カスタムのマッピングテーブル名。データテーブル名やインデックス名と一致する必要はありません。 |
column_name | はい | 列名。プライマリキーの定義は不要です。検索インデックスマッピングテーブルは VARCHAR 型をサポートしていません。文字列型の列には MEDIUMTEXT を使用してください。 |
index_name | はい | 検索インデックス名。ENGINE_ATTRIBUTE で指定します。インデックスはすでに存在している必要があります。 |
table_name | はい | 検索インデックスが属するデータテーブル名。ENGINE_ATTRIBUTE で指定します。 |
例
データテーブル exampletable1 の検索インデックス exampletable1_index のマッピングテーブル search_exampletable1 を作成します。
CREATE TABLE search_exampletable1(id BIGINT, colvalue MEDIUMTEXT, content MEDIUMTEXT) ENGINE='searchindex' ENGINE_ATTRIBUTE='{"index_name": "exampletable1_index", "table_name": "exampletable1"}';マッピングがすでに存在する場合のエラーを回避するには、IF NOT EXISTS を使用します。
CREATE TABLE IF NOT EXISTS search_exampletable1(id BIGINT, colvalue MEDIUMTEXT, content MEDIUMTEXT) ENGINE='searchindex' ENGINE_ATTRIBUTE='{"index_name": "exampletable1_index", "table_name": "exampletable1"}';マッピングテーブルの列の更新
ALTER TABLE ステートメントは、既存のマッピングテーブルに属性列を追加または削除します。
CREATE TABLEステートメントで作成されたマッピングテーブルのみがALTER TABLEをサポートします。DESCRIBEや他のステートメントによって自動バインドされたマッピングテーブルは、この操作をサポートしません。各ステートメントは 1 つの列を追加または削除します。複数の列を変更するには、ステートメントを複数回実行してください。
ALTER TABLEはマッピングテーブルのスキーマのみを更新し、データテーブルのストレージ構造には影響しません。プライマリキー列は追加または削除できません。
このステートメントを実行した後、SQL エンジンは非同期にリフレッシュされ、完了までに最大 30 秒かかります。リフレッシュ中のクエリでは、新しい列が返されない場合があります。
構文
ALTER TABLE table_name option column_name [data_type];パラメーター
パラメーター | 必須 | 説明 |
table_name | はい | マッピングテーブル名。 |
option | はい | 操作の種類: |
column_name | はい | 列名。列を追加する場合、名前は既存の列名と重複してはなりません。列名の大文字小文字のルールは |
data_type |
| 列の SQL データ型。データ型は、データテーブルの対応する列と一致する必要があります。 |
例
マッピングテーブルに属性列を追加します。
ALTER TABLE exampletable ADD COLUMN new_col1 BIGINT;
ALTER TABLE exampletable ADD COLUMN new_col2 MEDIUMTEXT;マッピングテーブルから属性列を削除します。
ALTER TABLE exampletable DROP COLUMN content;マッピングの削除
DROP MAPPING TABLE ステートメントは、一度に 1 つ以上のマッピングを削除します。
このステートメントは SQL マッピングのみを削除します。元のデータテーブルとそのデータには影響しません。
構文
DROP MAPPING TABLE [IF EXISTS] table_name, ...;パラメーター
パラメーター | 必須 | 説明 |
table_name | はい | マッピングテーブル名。複数の名前はカンマ (,) で区切ります。 |
IF EXISTS | いいえ | 指定した場合、マッピングが存在しなくてもエラーは返されません。指定しない場合、 |
例
DROP MAPPING TABLE IF EXISTS exampletable;テーブル詳細の表示
DESCRIBE ステートメントは、マッピングテーブルのフィールド名、データ型、NULL 許容性、プライマリキーフラグを返します。
構文
DESCRIBE table_name;パラメーター
パラメーター | 必須 | 説明 |
table_name | はい | マッピングテーブル名。 |
例
exampletable マッピングテーブルの詳細を表示します。
DESCRIBE exampletable;出力には次の列が含まれます。
列 | 例 | 説明 |
Field | pk1 | フィールド名。 |
Type | varchar (1024) | フィールドの SQL データ型。 |
Null | NO | フィールドが NULL 値を許可するかどうか。プライマリキー列の場合は NO、属性列の場合は YES です。 |
Key | PRI | プライマリキーフラグ。PRI はプライマリキー列を示します。空の値は属性列を示します。 |
インデックス詳細の表示
マッピングテーブルに関連付けられているインデックス (プライマリキーインデックス、セカンダリインデックス、検索インデックスなど) を表示するには、SHOW INDEX ステートメントを使用します。
構文
SHOW INDEX {FROM | IN} table_name;パラメーター
パラメーター | 必須 | 説明 |
table_name | はい | マッピングテーブル名。 |
例
データテーブルマッピングのインデックスを表示します (プライマリキー、セカンダリインデックス、検索インデックスを返します)。
SHOW INDEX IN exampletable;Index_type 列はインデックスの種類を示します。空の値はプライマリキーインデックス、GlobalIndex はセカンダリインデックス、SearchIndex は検索インデックスを示します。
検索インデックスマッピングのインデックスを表示します。
SHOW INDEX IN search_exampletable1;検索インデックスマッピングテーブルの場合、SHOW INDEX はプライマリキーインデックスとして _system_hidden_pk_field (システム生成の非表示プライマリキー) を返します。各列には、Search_type の値も表示されます (例: LONG、KEYWORD、TEXT)。
マッピングテーブルの表示
SHOW TABLES は、現在のインスタンス内のすべてのマッピングテーブルを一覧表示します。
構文
SHOW TABLES;出力例:
+------------------------+
| Tables_in_myinstance |
+------------------------+
| exampletable |
+------------------------+
| search_exampletable1 |
+------------------------+一般的なエラー
DDL ステートメントが失敗すると、SQL エンジンは次のエラーを返します。原因となったステートメントとメッセージを使用して問題を特定してください。
エラーメッセージ | ステートメント | 原因と解決策 |
Table 'instance.table' doesn't exist |
| データテーブルが存在しません。 |
Table 'instance.table' already exists |
| マッピングはすでに存在します。このエラーを抑制するには、 |
Unknown mapping table 'instance.table' |
| マッピングが存在しません。このエラーを抑制するには、 |
Unsupported alter non-mapping table |
| 対象のテーブルが |