すべてのプロダクト
Search
ドキュメントセンター

Tablestore:DDL 操作

最終更新日:Jun 06, 2026

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 already exists エラーが返されます。

table_name

はい

マッピングテーブル名。この名前はデータテーブル名と一致する必要があります。

column_name

はい

列名。SQL の列名は、データテーブルの列名と一致する必要があります (大文字と小文字は区別されません)。たとえば、データテーブルの列が Aa の場合、AaAAaA、または aa を使用できます。

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

いいえ

実行エンジンの種類。デフォルトは tablestore で、SQL エンジンが自動的にインデックスを選択することを意味します。

consistency

いいえ

クエリ結果の整合性レベル。有効な値: strong (強力な整合性) と eventual (結果整合性、デフォルト)。strong に設定すると、検索インデックスは結果整合性しか提供しないため、SQL エンジンは検索インデックスを選択しません。

allow_inaccurate_aggregation

いいえ

クエリパフォーマンスと引き換えに集計の精度を犠牲にするかどうかを指定します。デフォルトは true です。false に設定すると、SQL エンジンは集計に検索インデックスを選択しません。検索インデックスマッピングテーブルの場合、このパラメーターは true に固定されます。

プライマリキー列 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

はい

操作の種類: ADD COLUMN は属性列を追加し、DROP COLUMN は属性列を削除します。

column_name

はい

列名。列を追加する場合、名前は既存の列名と重複してはなりません。列名の大文字小文字のルールは CREATE TABLE と同じです。

data_type

ADD COLUMN のみ

列の SQL データ型。データ型は、データテーブルの対応する列と一致する必要があります。DROP COLUMN には不要です。

マッピングテーブルに属性列を追加します。

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

いいえ

指定した場合、マッピングが存在しなくてもエラーは返されません。指定しない場合、Unknown mapping table エラーが返されます。

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

はい

マッピングテーブル名。FROMIN は交換可能です。

データテーブルマッピングのインデックスを表示します (プライマリキー、セカンダリインデックス、検索インデックスを返します)。

SHOW INDEX IN exampletable;

Index_type 列はインデックスの種類を示します。空の値はプライマリキーインデックス、GlobalIndex はセカンダリインデックス、SearchIndex は検索インデックスを示します。

検索インデックスマッピングのインデックスを表示します。

SHOW INDEX IN search_exampletable1;

検索インデックスマッピングテーブルの場合、SHOW INDEX はプライマリキーインデックスとして _system_hidden_pk_field (システム生成の非表示プライマリキー) を返します。各列には、Search_type の値も表示されます (例: LONGKEYWORDTEXT)。

マッピングテーブルの表示

SHOW TABLES は、現在のインスタンス内のすべてのマッピングテーブルを一覧表示します。

構文

SHOW TABLES;

出力例:

+------------------------+
| Tables_in_myinstance   |
+------------------------+
| exampletable           |
+------------------------+
| search_exampletable1   |
+------------------------+

一般的なエラー

DDL ステートメントが失敗すると、SQL エンジンは次のエラーを返します。原因となったステートメントとメッセージを使用して問題を特定してください。

エラーメッセージ

ステートメント

原因と解決策

Table 'instance.table' doesn't exist

CREATE TABLE

データテーブルが存在しません。CREATE TABLE は、既存のデータテーブルまたは検索インデックスのマッピングのみを作成します。まずデータテーブルが作成されていることを確認してください。

Table 'instance.table' already exists

CREATE TABLE

マッピングはすでに存在します。このエラーを抑制するには、IF NOT EXISTS を使用します。マッピングを再作成するには、まず DROP MAPPING TABLE を実行してください。

Unknown mapping table 'instance.table'

DROP MAPPING TABLE

マッピングが存在しません。このエラーを抑制するには、IF EXISTS を使用します。

Unsupported alter non-mapping table

ALTER TABLE

対象のテーブルが CREATE TABLE で作成されたマッピングテーブルではありません。これは、ALTER TABLE をサポートしない自動バインドされたマッピングテーブルである可能性があります。