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

Tablestore:テーブルのマッピングテーブルを作成する

最終更新日:May 22, 2025

既存のテーブルまたは 多次元インデックス のマッピングテーブルを作成するには、CREATE TABLE 文を実行します。マッピングテーブルを作成する場合は、テーブルのフィールド名、フィールドタイプ、およびプライマリキー情報を設定する必要があります。ビジネス要件に基づいて、データのクエリに使用される 実行エンジン を設定することもできます。 このトピックでは、既存のテーブルのマッピングテーブルを作成する方法について説明します。

説明

詳細については、「多次元インデックスのマッピングテーブルを作成する」をご参照ください。

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つしかない場合は、次の構文を使用して既存のテーブルのマッピングテーブルを作成できます。

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 [,"allow_inaccurate_aggregation": allow_inaccurate_aggregation]}';

パラメーター

パラメーター

必須

説明

IF NOT EXISTS

いいえ

テーブルが存在するかどうかに関係なく、成功 応答 が返されるように指定します。 IF NOT EXISTS を指定しない場合、テーブルが存在しない場合にのみ成功 応答 が返されます。

table_name

はい

テーブルの名前。テーブルを識別するために使用されます。

SQL のテーブル名は、Tablestore のテーブル名と同じである必要があります。

column_name

はい

列の名前。

SQL の列名は、Tablestore テーブルの列名と同等である必要があります。たとえば、Tablestore テーブルの列名が Aa の場合、SQL の列名は Aa、AA、aA、または aa である必要があります。

data_type

はい

列の データの型 。例: BIGINT、DOUBLE、BOOL。

SQL の列の データの型 は、Tablestore テーブルの列の データの型 と一致する必要があります。 データの型 のマッピングの詳細については、「SQL データの型 マッピング」をご参照ください。

NOT NULL | NULL

いいえ

列の値を NULL にできるかどうかを指定します。 デフォルト の CMK を使用するか、CMK を指定できます。

  • NOT NULL: 列の値を NULL にすることはできません。デフォルトでは、 プライマリキー列 の値を NULL にすることはできません。

  • NULL: 列の値を NULL にすることができます。デフォルトでは、 属性 列の値を NULL にすることができます。

    属性 列の値を NULL にできない場合は、 属性 列に対してこのパラメーターを NOT NULL に設定する必要があります。

key_part

はい

プライマリキー列 の名前。複数の プライマリキー列 を指定できます。複数の プライマリキー列 はコンマ (,) で区切ります。

プライマリキー列 の名前は、列名に含める必要があります。

ENGINE

いいえ

マッピングテーブルを使用してデータをクエリするときに使用される 実行エンジン 。 デフォルト値 : tablestore。

  • tablestore: SQL エンジン は、クエリを実行する適切な インデックス を自動的に選択します。

  • searchindex: SQL エンジン は、指定された 多次元インデックス を使用してクエリを実行します。 ENGINE が searchindex に設定されている場合は、ENGINE_ATTRIBUTE で index_name パラメーターと table_name パラメーターを設定する必要があります。

ENGINE_ATTRIBUTE

いいえ

実行エンジン の 属性 。このパラメーターの値は JSON 形式で、次の項目が含まれています。

  • index_name: マッピングテーブルが作成される 多次元インデックス の名前。 多次元インデックス のマッピングテーブルを作成する場合にのみ、この項目を指定する必要があります。

  • table_name: 多次元インデックス が作成されるデータテーブルの名前。 多次元インデックス のマッピングテーブルを作成する場合にのみ、この項目を指定する必要があります。

  • consistency: 実行エンジン でサポートされている整合性モード。

    • テーブルのマッピングテーブルを作成する場合の有効な値:

      • eventual: クエリ結果は結果整合性モードです。これは デフォルト値 です。データがテーブルに書き込まれてから数秒後にデータをクエリできます。

      • strong: クエリ結果は 強力な整合性 モードです。データがテーブルに書き込まれた直後にデータをクエリできます。

    • 多次元インデックス のマッピングテーブルを作成する場合、consistency の値は eventual であり、変更できません。

  • allow_inaccurate_aggregation: 集約操作 の精度を損なうことによってクエリのパフォーマンスを向上させることができるかどうかを指定します。

    • テーブルのマッピングテーブルを作成する場合、allow_inaccurate_aggregation の デフォルト値 は true です。これは、 集約操作 の精度を損なうことによってクエリのパフォーマンスを向上させることができることを示します。ビジネス要件に基づいて、allow_inaccurate_aggregation を false に設定できます。

    • 多次元インデックス のマッピングテーブルを作成する場合、allow_inaccurate_aggregation の値は true であり、変更できません。

  • 例 1

    次のサンプル コード は、exampletable1 という名前のマッピングテーブルを作成する方法の例を示しています。テーブルには、id プライマリキー列 と、colvalue 属性 列と content 属性 列が含まれています。 id プライマリキー列 と colvalue 属性 列は BIGINT 型で、content 属性 列は MEDIUMTEXT 型です。

    CREATE TABLE exampletable1 (id BIGINT(20) PRIMARY KEY, colvalue BIGINT(20), content MEDIUMTEXT);
  • 例 2

    次のサンプル コード は、exampletable2 という名前のマッピングテーブルを作成する方法の例を示しています。テーブルには、id プライマリキー列 と colvalue プライマリキー列 、および content 属性 列が含まれています。 id プライマリキー列 は BIGINT 型、colvalue プライマリキー列 は VARCHAR 型、content 属性 列は MEDIUMTEXT 型です。テーブルで実行されるクエリの結果は、 強力な整合性 モードである必要があります。

    CREATE TABLE exampletable2 (id BIGINT(20), colvalue VARCHAR(1024), content MEDIUMTEXT, PRIMARY KEY(colvalue, id)) ENGINE_ATTRIBUTE='{"consistency": "strong"}';

よくある質問

マッピングテーブルを作成するときに エラーメッセージ "Table 'instancename.tablename' doesn't exist" が表示されるのはなぜですか?

  • 考えられる原因:

    マッピングテーブルを作成するテーブルが存在しません。

  • 解決策:

    SQL で CREATE TABLE 文を実行して、既存のテーブルまたは 多次元インデックス のマッピングテーブルのみを作成できます。マッピングテーブルを作成するテーブルまたは 多次元インデックス が存在することを確認してください。

マッピングテーブルを作成するときに エラーメッセージ "Table 'instancename.tablename' already exist" が表示されるのはなぜですか?

  • 考えられる原因:

    テーブルのマッピングテーブルが既に作成されています。

    • テーブルのマッピングテーブルを手動で作成しました。

    • Tablestore がテーブルのマッピングテーブルを自動的に作成しました。データテーブルのマッピングテーブルを作成せずに、DESCRIBE や SELECT などの SQL 文を直接使用してデータをクエリすると、Tablestore はデータテーブルのマッピングテーブルを自動的に作成します。Tablestore によって自動的に作成されるマッピングテーブルには、データテーブルの プライマリキー列 と 事前定義列 のみが含まれます。マッピングテーブルの 属性 列は更新できません。

  • 解決策:

    DESCRIBE 文を使用して、既存のマッピングテーブルの 構造 を表示できます。 構造 がクエリ要件を満たしていない場合は、マッピングテーブルの 属性 列を更新できます。システムによって自動的に作成されたマッピングテーブルの 属性 列は更新できません。マッピングテーブルを削除して再作成する前に、ビジネスに影響がないことを確認してください

説明

SQL クエリの一般的な エラー と ソリューション の詳細については、「SQL クエリの一般的なエラーのトラブルシューティング」をご参照ください。

参照