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

Tablestore:データテーブルを作成する

最終更新日:Dec 28, 2024

このトピックでは、パラメータとサンプルコードを使用して、Java 向け Tablestore SDK を使用してデータテーブルを作成する方法について説明します。データテーブルを作成する際には、データテーブルのスキーマ情報と構成情報を指定する必要があります。高性能インスタンスのデータテーブルに対して、予約読み取り/書き込みスループットを指定できます。

使用上の注意

  • データテーブルを作成した後、データテーブルのロードに数秒かかります。この間、データテーブルに対するすべての読み取りおよび書き込み操作は失敗します。データテーブルがロードされた後に、データテーブルに対する操作を実行してください。

  • Tablestore はデータ暗号化機能を提供します。データテーブルを作成する際に暗号化関連のパラメータを設定することで、データのセキュリティを高め、コンプライアンス要件を満たすことができます。詳細については、暗号化テーブルを作成するを参照してください。

  • eコマース Web サイトのアイテム ID やフォーラムの投稿 ID など、自動インクリメント主キー列が必要なシナリオでは、データテーブルを作成する際に自動インクリメント主キー列を指定できます。詳細については、自動インクリメント主キー列を設定するを参照してください。

前提条件

API 操作

/**
 * 説明:指定されたテーブルスキーマに基づいてデータテーブルを作成します。
 * データテーブルを作成した後、データテーブル内のパーティションをロードするために数秒かかります。パーティションがロードされた後にのみ、データテーブルに対する操作を実行できます。
 * レスポンス:CreateTableResponse。
 */
CreateTableResponse createTable(CreateTableRequest createTableRequest) throws TableStoreException, ClientException

パラメータ

createTableRequest に含まれるパラメータを次の表に示します。

パラメータ

説明

tableMeta (必須)

データテーブルに関するスキーマ情報。次のパラメータを設定して、スキーマ情報を指定できます。

  • tableName:このパラメータは必須であり、データテーブルの名前を指定します。

  • primaryKey:このパラメータは必須であり、データテーブルの主キーのスキーマを指定します。詳細については、コアコンポーネントを参照してください。

    • 主キー列のタイプは、String、Integer、または Binary にすることができます。

    • 1 ~ 4 つの主キー列を指定できます。Tablestore は、主キー列が指定された順序で主キーを生成します。デフォルトでは、データテーブルの行は主キーによって降順にソートされます。

    • 最初の主キー列はパーティションキーです。

  • definedColumns:このパラメータはオプションであり、データテーブルの定義済み列を指定します。定義済み列のタイプは、String、Integer、Binary、Double、または Boolean にすることができます。

    説明
    • 定義済み列は、主キー列ではない列で、データテーブル用に作成されたセカンダリインデックスの主キー列または定義済み列として使用して、データクエリを高速化できます。

    • データテーブルを作成するときに属性列のスキーマを指定する必要はありません。データテーブルにデータを書き込むときに、行ごとに異なる数の属性列と異なる属性列名を指定できます。

tableOptions (必須)

データテーブルに関する構成情報。次のパラメータを設定して、構成情報を指定できます。

  • timeToLive:このパラメータは必須であり、データテーブル内のデータの保持期間を指定します。単位:秒。

    このパラメータには、86400 以上または -1 の値を設定できます。値 86400 は 1 日を指定します。値 -1 は、データが期限切れにならないことを指定します。

    重要

    データテーブルの検索インデックスまたはセカンダリインデックスを作成する場合は、このパラメータを -1 に設定するか、allowUpdate パラメータを false に設定する必要があります。

  • maxVersions:このパラメータは必須であり、各属性列のデータに保持できるバージョンの最大数を指定します。

    重要

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

  • maxTimeDeviation:このパラメータはオプションであり、現在のシステム時刻と書き込まれたデータのタイムスタンプの最大差を指定します。単位:秒。

    デフォルト値:86400。属性列のデータの有効なバージョン範囲は、左閉右開区間であり、次の式を使用して計算されます。有効なバージョン範囲 = [max{データ書き込み時刻 - 最大バージョンオフセット、データ書き込み時刻 - TTL 値}、データ書き込み時刻 + 最大バージョンオフセット)

  • allowUpdate:このパラメータはオプションであり、データテーブルに対する更新操作を許可するかどうかを指定します。デフォルト値:true。

    重要

    データテーブル用に作成された検索インデックスの Time To Live(TTL)機能を使用する場合は、このパラメータを false に設定する必要があります。データテーブルのデータを更新する場合は、PutRow 操作を呼び出してデータテーブルにデータを書き込むことができます。

indexMeta (オプション)

インデックスのリスト。各インデックスに対して次のパラメータを設定できます。

  • indexName:このパラメータは必須であり、インデックスの名前を指定します。

  • primaryKey:このパラメータは必須であり、インデックスの主キー列を指定します。インデックスの主キー列は、インデックスが作成されたデータテーブルの主キー列と定義済み列の組み合わせです。

    重要

    ローカルセカンダリインデックスを作成する場合は、インデックスの最初の主キー列がデータテーブルの最初の主キー列である必要があります。

  • definedColumns:このパラメータはオプションであり、インデックスの定義済み列を指定します。インデックスの定義済み列は、インデックスが作成されたデータテーブルの定義済み列の組み合わせです。

  • indexType:このパラメータはオプションであり、インデックスのタイプを指定します。有効な値:

    • IT_GLOBAL_INDEX:グローバルセカンダリインデックス。これがデフォルト値です。

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

  • indexUpdateMode:このパラメータはオプションであり、インデックスの更新モードを指定します。有効な値:

    • IUM_ASYNC_INDEX:非同期更新モード。これがデフォルト値です。

      説明

      グローバルセカンダリインデックス機能を使用する場合は、indexUpdateMode パラメータを IUM_ASYNC_INDEX に設定する必要があります。

    • IUM_SYNC_INDEX:同期更新モード。

      説明

      ローカルセカンダリインデックス機能を使用する場合は、indexUpdateMode パラメータを IUM_SYNC_INDEX に設定する必要があります。

reservedThroughtput (オプション)

予約読み取り/書き込みスループット。単位:キャパシティユニット(CU)。デフォルト値:0。

重要

高性能インスタンスのデータテーブルに対してのみ、予約読み取り/書き込みスループットを 0 以外の値に設定できます。

streamSpecification (オプション)

データテーブルに関する Stream 構成情報。次のパラメータを設定して、Stream 構成情報を指定できます。

  • enableStream:このパラメータはオプションであり、Stream 機能を有効にするかどうかを指定します。デフォルト値:false。値 false は、Stream 機能が無効になっていることを指定します。

  • expirationTime:このパラメータはオプションであり、増分ログの有効期間を指定します。単位:時間。最大値:168。値 168 は 7 日を指定します。

    説明

    Stream 機能が有効になっている場合は、expirationTime パラメータを設定する必要があります。

sseSpecification (オプション)

データテーブルの暗号化設定。

重要

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

enableLocalTxn (オプション)

ローカルトランザクション機能を有効にするかどうかを指定します。デフォルト値:false。値 false は、ローカルトランザクション機能が無効になっていることを指定します。

重要
  • この機能は、Java V5.11.0 以降の Tablestore SDK でのみサポートされています。

  • 自動インクリメント主キー列機能とローカルトランザクション機能を同時に使用することはできません。自動インクリメント主キー列を指定した場合、ローカルトランザクション設定は有効になりません。

  • データテーブルを作成するときにローカルトランザクション機能が無効になっていて、データテーブルの作成後にこの機能を使用する場合は、チケットを送信してください。

データテーブルを作成する

次のサンプルコードは、データテーブルを作成する方法の例を示しています。

private static void createTable(SyncClient client) {
    // データテーブルの名前を指定します。
    TableMeta tableMeta = new TableMeta("<TABLE_NAME>");
    // データテーブルに主キー列を追加します。テーブルには、String タイプの pk1 主キー列と Integer タイプの pk2 主キー列が含まれています。pk1 主キー列はパーティションキーです。pk2 主キー列は自動インクリメント主キー列です。
    tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema("pk1", PrimaryKeyType.STRING));
    tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema("pk2", PrimaryKeyType.INTEGER, PrimaryKeyOption.AUTO_INCREMENT));
    // データテーブル内のデータの TTL を指定します。値 -1 は、データテーブル内のデータが期限切れにならないことを指定します。
    int timeToLive = -1;
    // データテーブルの各属性列のデータに保持できるバージョンの最大数を指定します。この例では、各属性列のデータの最新バージョンのみを保持できます。
    int maxVersions = 1;
    // 現在のシステム時刻と書き込まれたデータのタイムスタンプの最大差を指定します。この例では、最大差は 86,400 秒(1 日)に設定されています。
    long maxTimeDeviation = 86400L;
    TableOptions tableOptions = new TableOptions(timeToLive, maxVersions, maxTimeDeviation);
    // 予約読み取り/書き込みスループットを指定します。キャパシティインスタンスのデータテーブルに対してのみ、予約読み取り/書き込みスループットを 0 に設定できます。高性能インスタンスのデータテーブルに対しては、予約読み取り/書き込みスループットを 0 以外の値に設定できます。
    ReservedThroughput reservedThroughput = new ReservedThroughput(new CapacityUnit(0, 0));
    
    CreateTableRequest request = new CreateTableRequest(tableMeta, tableOptions, reservedThroughput);
    client.createTable(request);
}

データテーブルとセカンダリインデックスを作成する

データテーブルとグローバルセカンダリインデックスを作成する

次のサンプルコードは、データテーブルとデータテーブルのグローバルセカンダリインデックスを同時に作成する方法の例を示しています。

private static void createTable(SyncClient client) {
    // データテーブルの名前を指定します。
    TableMeta tableMeta = new TableMeta("<TABLE_NAME>");
    // データテーブルに主キー列を追加します。データテーブルには、String タイプの pk1 主キー列と Integer タイプの pk2 主キー列が含まれています。
    tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema("pk1", PrimaryKeyType.STRING));
    tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema("pk2", PrimaryKeyType.INTEGER));
    // データテーブルに定義済み列を追加します。データテーブルの定義済み列は、String タイプの defcol1 列と Integer タイプの defcol2 列です。
    tableMeta.addDefinedColumn(new DefinedColumnSchema("defcol1", DefinedColumnType.STRING));
    tableMeta.addDefinedColumn(new DefinedColumnSchema("defcol2", DefinedColumnType.INTEGER));
    // データテーブル内のデータの TTL を指定します。値 -1 は、データテーブル内のデータが期限切れにならないことを指定します。
    int timeToLive = -1;
    // データテーブルの各属性列のデータに保持できるバージョンの最大数を指定します。この例では、各属性列のデータの最新バージョンのみを保持できます。
    int maxVersions = 1;
    TableOptions tableOptions = new TableOptions(timeToLive, maxVersions);
    
    // グローバルセカンダリインデックスの構成を指定します。
    ArrayList<IndexMeta> indexMetas = new ArrayList<IndexMeta>();
    // インデックスの名前を指定します。
    IndexMeta indexMeta = new IndexMeta("<INDEX_NAME>");
    // インデックスに主キー列を追加します。インデックスの主キー列は、defcol1、pk1、および pk2 です。
    indexMeta.addPrimaryKeyColumn("defcol1");
    indexMeta.addPrimaryKeyColumn("pk1");
    indexMeta.addPrimaryKeyColumn("pk2");
    // インデックスに定義済み列を追加します。インデックスの定義済み列は defcol2 です。
    indexMeta.addDefinedColumn("defcol2");
    indexMetas.add(indexMeta);
    
    // データテーブルとグローバルセカンダリインデックスを同時に作成します。
    CreateTableRequest request = new CreateTableRequest(tableMeta, tableOptions, indexMetas);
    client.createTable(request);
}

データテーブルとローカルセカンダリインデックスを作成する

次のサンプルコードは、データテーブルとデータテーブルのローカルセカンダリインデックスを同時に作成する方法の例を示しています。

private static void createTable(SyncClient client) {
    // データテーブルの名前を指定します。
    TableMeta tableMeta = new TableMeta("<TABLE_NAME>");
    // データテーブルに主キー列を追加します。データテーブルには、String タイプの pk1 主キー列と Integer タイプの pk2 主キー列が含まれています。
    tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema("pk1", PrimaryKeyType.STRING));
    tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema("pk2", PrimaryKeyType.INTEGER));
    // データテーブルに定義済み列を追加します。データテーブルの定義済み列は、String タイプの defcol1 列と Integer タイプの defcol2 列です。
    tableMeta.addDefinedColumn(new DefinedColumnSchema("defcol1", DefinedColumnType.STRING));
    tableMeta.addDefinedColumn(new DefinedColumnSchema("defcol2", DefinedColumnType.INTEGER));
    // データテーブル内のデータの TTL を指定します。値 -1 は、データテーブル内のデータが期限切れにならないことを指定します。
    int timeToLive = -1;
    // データテーブルの各属性列のデータに保持できるバージョンの最大数を指定します。この例では、各属性列のデータの最新バージョンのみを保持できます。
    int maxVersions = 1;
    TableOptions tableOptions = new TableOptions(timeToLive, maxVersions);

    // ローカルセカンダリインデックスの構成を指定します。
    ArrayList<IndexMeta> indexMetas = new ArrayList<IndexMeta>();
    // インデックスの名前を指定します。
    IndexMeta indexMeta = new IndexMeta("<INDEX_NAME>");
    // インデックスタイプを IT_LOCAL_INDEX に設定します。
    indexMeta.setIndexType(IT_LOCAL_INDEX);
    // インデックス更新モードを IUM_SYNC_INDEX に設定します。indexType パラメータを IT_LOCAL_INDEX に設定する場合は、indexUpdateMode パラメータを IUM_SYNC_INDEX に設定する必要があります。
    indexMeta.setIndexUpdateMode(IUM_SYNC_INDEX);
    // インデックスに主キー列を追加します。インデックスの主キー列は、pk1、defcol1、および pk2 です。
    indexMeta.addPrimaryKeyColumn("pk1");
    indexMeta.addPrimaryKeyColumn("defcol1");
    indexMeta.addPrimaryKeyColumn("pk2");
    // インデックスに定義済み列を追加します。インデックスの定義済み列は defcol2 です。
    indexMeta.addDefinedColumn("defcol2");
    indexMetas.add(indexMeta);
    
    // データテーブルとローカルセカンダリインデックスを同時に作成します。
    CreateTableRequest request = new CreateTableRequest(tableMeta, tableOptions, indexMetas);
    client.createTable(request);
}

ローカルトランザクション機能を有効にしてデータテーブルを作成する

次のサンプルコードは、ローカルトランザクション機能を有効にしてデータテーブルを作成する方法の例を示しています。

private static void createTable(SyncClient client) {
    // データテーブルの名前を指定します。
    TableMeta tableMeta = new TableMeta("<TABLE_NAME>");
    // データテーブルに主キー列を追加します。データテーブルには、String タイプの pk1 主キー列と Integer タイプの pk2 主キー列が含まれています。
    tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema("pk1", PrimaryKeyType.STRING));
    tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema("pk2", PrimaryKeyType.INTEGER));
    // データテーブル内のデータの TTL を指定します。値 -1 は、データテーブル内のデータが期限切れにならないことを指定します。
    int timeToLive = -1;
    // データテーブルの各属性列のデータに保持できるバージョンの最大数を指定します。この例では、各属性列のデータの最新バージョンのみを保持できます。
    int maxVersions = 1;
    TableOptions tableOptions = new TableOptions(timeToLive, maxVersions);

    CreateTableRequest request = new CreateTableRequest(tableMeta, tableOptions);
    // ローカルトランザクション機能を有効にします。データテーブルに自動インクリメント主キー列を指定した場合、ローカル

参照