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

Tablestore:テーブルの作成

最終更新日:Jul 23, 2026

Tablestore SDK for Java を使用して Wide Column モデルのテーブルを作成し、同じリクエストでそのスキーマ、データバージョン、インデックス、ストリーム、暗号化を設定します。

前提条件

Tablestore SDK for Java をインストールし、クライアントを初期化します。

説明

createTable を呼び出して Wide Column モデルのテーブルを作成します。このリクエストでは、少なくとも 1 つのプライマリキー列を含め、Time-to-Live (TTL) と最大バージョン数を指定する必要があります。

public CreateTableResponse createTable(CreateTableRequest createTableRequest) throws TableStoreException, ClientException

次の例では、example_table という名前のテーブルを作成します。このテーブルは 1 つの STRING 型プライマリキー列を持ち、データは無期限に保持され、データバージョンは 1 つだけ保持されます。

TableMeta tableMeta = new TableMeta("example_table");
tableMeta.addPrimaryKeyColumn(
        new PrimaryKeySchema("id", PrimaryKeyType.STRING));

TableOptions tableOptions = new TableOptions();
tableOptions.setTimeToLive(-1);
tableOptions.setMaxVersions(1);

CreateTableRequest request = new CreateTableRequest(tableMeta, tableOptions);
client.createTable(request);
説明

テーブルを作成した後、データ操作を実行する前に、テーブルがロードされるまで待機してください。

パラメーター

CreateTableRequest には、次のパラメーターが含まれています。

  • tableMeta (必須) TableMeta:テーブルスキーマ。以下のパラメーターを含みます。

    名前

    タイプ

    説明

    tableName (必須)

    String

    テーブルの名前。

    primaryKey (必須)

    List<PrimaryKeySchema>

    テーブルのプライマリキーのスキーマ。

    • 1〜4 つのプライマリキー列を設定できます。データはプライマリキーによって昇順にソートされます。最初のプライマリキー列はパーティションキーです。

    • プライマリキー列は、STRINGINTEGER、および BINARY データ型をサポートします。パーティションキーではない INTEGER 型のプライマリキー列は、自動インクリメントプライマリキー列として設定できます。

    definedColumns (任意)

    List<DefinedColumnSchema>

    テーブルの事前定義列。

  • tableOptions (必須) TableOptions:テーブルのデータバージョンと更新に関する設定。以下のパラメーターを含みます。

    名前

    タイプ

    説明

    timeToLive (必須)

    OptionalValue<Integer>

    データの Time-to-Live (TTL)。単位:秒。

    • -1 に設定すると、データは無期限に保持されます。それ以外の値を設定する場合、最小値は 86400 (1 日) です。TTL を超えたデータは自動的に削除されます。

    • 検索インデックスまたはセカンダリインデックスを使用するには、TTL を -1 に設定するか、allowUpdate パラメーターを false に設定する必要があります。

    maxVersions (必須)

    OptionalValue<Integer>

    保持するデータバージョンの最大数。

    検索インデックスまたはセカンダリインデックスを使用するには、このパラメーターを 1 に設定する必要があります。

    maxTimeDeviation (任意)

    OptionalValue<Long>

    最大バージョンオフセット。単位:秒。デフォルト値:86400 (1 日)。

    • 書き込むデータのタイムスタンプと現在のシステム時刻との差は、最大バージョンオフセットの範囲内である必要があります。そうでない場合、書き込み操作は失敗します。

    • 属性列データの有効なバージョン範囲は、[max(データ書き込み時刻 - 最大バージョンオフセット, データ書き込み時刻 - Time-to-Live (TTL)), データ書き込み時刻 + 最大バージョンオフセット) です。

    allowUpdate (任意)

    OptionalValue<Boolean>

    updateRow メソッドを使用してデータを更新できるかどうかを指定します。デフォルト値:true

    このパラメーターを false に設定すると、データは更新できません。

  • indexMeta (任意) List<IndexMeta>:テーブルと同時に作成するセカンダリインデックス。各インデックスは、以下のパラメーターを含みます。

    名前

    タイプ

    説明

    indexName (必須)

    String

    インデックスの名前。

    primaryKey (必須)

    List<String>

    インデックスのプライマリキー列。

    • インデックスのプライマリキーは、テーブルのプライマリキー列と事前定義列で構成できます。

    • ローカルセカンダリインデックスの場合、インデックスの最初のプライマリキー列は、テーブルの最初のプライマリキー列と一致する必要があります。

    definedColumns (任意)

    List<String>

    インデックスの事前定義列。この列は、テーブルの事前定義列である必要があります。

    indexType (任意)

    IndexType

    インデックスのタイプ。有効な値:

    • IT_GLOBAL_INDEX (デフォルト):グローバルセカンダリインデックス。

    • IT_LOCAL_INDEX:ローカルセカンダリインデックス。

    indexUpdateMode (任意)

    IndexUpdateMode

    インデックスの更新モード。有効な値:

    • IUM_ASYNC_INDEX (デフォルト):非同期更新。グローバルセカンダリインデックスは、非同期更新を使用する必要があります。

    • IUM_SYNC_INDEX:同期更新。ローカルセカンダリインデックスの更新モードは、同期である必要があります。

  • streamSpecification (任意) OptionalValue<StreamSpecification>:ストリーム設定。以下のパラメーターを含みます。

    名前

    タイプ

    説明

    enableStream (必須)

    boolean

    ストリームを有効にするかどうかを指定します。デフォルト値:false

    expirationTime (任意)

    OptionalValue<Integer>

    増分ログの保持期間。単位:時間。最大値:168 (7 日)。

    enableStreamtrue に設定した場合、expirationTime パラメーターは必須です。

  • enableLocalTxn (任意) OptionalValue<Boolean>ローカルトランザクションを有効にするかどうかを指定します。デフォルト値:false

    • ローカルトランザクションは、Tablestore SDK for Java 5.11.0 以降でのみサポートされます。

    • ローカルトランザクションと自動採番主キー列は相互に排他的です。自動採番主キー列が設定されている場合、ローカルトランザクションを有効にしても有効になりません。

    • 既存のテーブルでローカルトランザクションを有効にするには、チケットを起票

  • sseSpecification (任意) OptionalValue<SSESpecification>データ暗号化の設定。暗号化はテーブルの作成時にのみ設定できます。パラメーターを以下の表に示します。

    名前

    タイプ

    説明

    enable (必須)

    boolean

    データ暗号化を有効にするかどうかを指定します。デフォルト値:false

    keyType (任意)

    OptionalValue<SSEKeyType>

    暗号化タイプ。有効な値:

    • SSE_KMS_SERVICE:KMS サービスキーによる暗号化。

    • SSE_BYOK:Bring-Your-Own-Key (BYOK) による暗号化。

    keyId (任意)

    OptionalValue<String>

    カスタマーマスターキー (CMK) の ID。keyTypeSSE_BYOK に設定されている場合、このパラメーターは必須です。

    roleArn (任意)

    OptionalValue<String>

    Resource Access Management (RAM) ロールの Alibaba Cloud リソースネーム (ARN)。keyTypeSSE_BYOK に設定されている場合、このパラメーターは必須です。

  • reservedThroughput (任意) ReservedThroughput予約済み読み取り/書き込みスループット。単位:キャパシティーユニット (CU)。デフォルト値:0。CU モードのコンピューティング最適化インスタンスにのみ適用されます。

テーブルスキーマとデータバージョンの設定

次の例では、2 つのプライマリキー列と 1 つの事前定義列を持つテーブルを作成します。この例では、最大バージョンオフセットを設定し、更新を無効にします。

TableMeta tableMeta = new TableMeta("example_table");
tableMeta.addPrimaryKeyColumn(
        new PrimaryKeySchema("id", PrimaryKeyType.STRING));
tableMeta.addPrimaryKeyColumn(
        new PrimaryKeySchema("device_id", PrimaryKeyType.INTEGER));
tableMeta.addDefinedColumn("status", DefinedColumnType.STRING);

TableOptions tableOptions = new TableOptions();
tableOptions.setTimeToLive(-1);
tableOptions.setMaxVersions(1);
tableOptions.setMaxTimeDeviation(86400L);
tableOptions.setAllowUpdate(false);

CreateTableRequest request = new CreateTableRequest(tableMeta, tableOptions);
client.createTable(request);

テーブルと同時にセカンダリインデックスを作成

次の例では、テーブルと同時に example_table_index という名前のグローバルセカンダリインデックスを作成します。インデックスのプライマリキー列 category は、まずテーブルの事前定義列として定義する必要があります。

TableMeta tableMeta = new TableMeta("example_table");
tableMeta.addPrimaryKeyColumn(
        new PrimaryKeySchema("id", PrimaryKeyType.STRING));
tableMeta.addDefinedColumn("category", DefinedColumnType.STRING);

TableOptions tableOptions = new TableOptions();
tableOptions.setTimeToLive(-1);
tableOptions.setMaxVersions(1);

IndexMeta indexMeta = new IndexMeta("example_table_index");
indexMeta.addPrimaryKeyColumn("category");
indexMeta.setIndexType(IndexType.IT_GLOBAL_INDEX);
indexMeta.setIndexUpdateMode(IndexUpdateMode.IUM_ASYNC_INDEX);

List<IndexMeta> indexMetas = new ArrayList<IndexMeta>();
indexMetas.add(indexMeta);
CreateTableRequest request =
        new CreateTableRequest(tableMeta, tableOptions, indexMetas);
client.createTable(request);

ストリームの有効化

次の例では、テーブル作成時にストリームを有効にし、増分ログの有効期限を 24 時間に設定します。

TableMeta tableMeta = new TableMeta("example_table");
tableMeta.addPrimaryKeyColumn(
        new PrimaryKeySchema("id", PrimaryKeyType.STRING));

TableOptions tableOptions = new TableOptions();
tableOptions.setTimeToLive(-1);
tableOptions.setMaxVersions(1);

CreateTableRequest request = new CreateTableRequest(tableMeta, tableOptions);
request.setStreamSpecification(new StreamSpecification(true, 24));
client.createTable(request);

ローカルトランザクションの有効化

次の例では、setLocalTxnEnabled を呼び出すことで、テーブル作成時にローカルトランザクションを有効にします。

TableMeta tableMeta = new TableMeta("example_table");
tableMeta.addPrimaryKeyColumn(
        new PrimaryKeySchema("id", PrimaryKeyType.STRING));

TableOptions tableOptions = new TableOptions();
tableOptions.setTimeToLive(-1);
tableOptions.setMaxVersions(1);

CreateTableRequest request = new CreateTableRequest(tableMeta, tableOptions);
request.setLocalTxnEnabled(true);
client.createTable(request);

テーブルの暗号化

次の例では、KMS サービスキーまたは Bring-Your-Own-Key (BYOK) を使用してテーブルを暗号化します。

重要

データ暗号化は、テーブルの作成時にのみ設定できます。テーブルを作成した後は、暗号化を無効にしたり、暗号化設定を変更したりすることはできません。

KMS サービスキーによる暗号化

TableMeta tableMeta = new TableMeta("example_table");
tableMeta.addPrimaryKeyColumn(
        new PrimaryKeySchema("id", PrimaryKeyType.STRING));

TableOptions tableOptions = new TableOptions();
tableOptions.setTimeToLive(-1);
tableOptions.setMaxVersions(1);

CreateTableRequest request = new CreateTableRequest(tableMeta, tableOptions);
request.setSseSpecification(
        new SSESpecification(true, SSEKeyType.SSE_KMS_SERVICE));
client.createTable(request);

Bring-Your-Own-Key (BYOK) による暗号化

説明

Bring-Your-Own-Key (BYOK) を使用するには、まずカスタマーマスターキー (CMK) ID と RAM ロールの ARN を取得する必要があります。詳細については、「Bring-Your-Own-Key (BYOK)」をご参照ください。

TableMeta tableMeta = new TableMeta("example_table");
tableMeta.addPrimaryKeyColumn(
        new PrimaryKeySchema("id", PrimaryKeyType.STRING));

TableOptions tableOptions = new TableOptions();
tableOptions.setTimeToLive(-1);
tableOptions.setMaxVersions(1);

CreateTableRequest request = new CreateTableRequest(tableMeta, tableOptions);
String keyId = "key-xxxx****";
String roleArn = "acs:ram::1234****:role/example-role";
request.setSseSpecification(
        new SSESpecification(true, SSEKeyType.SSE_BYOK, keyId, roleArn));
client.createTable(request);