このトピックでは、パラメータとサンプルコードを使用して、Java 向け Tablestore SDK を使用してデータテーブルを作成する方法について説明します。データテーブルを作成する際には、データテーブルのスキーマ情報と構成情報を指定する必要があります。高性能インスタンスのデータテーブルに対して、予約読み取り/書き込みスループットを指定できます。
使用上の注意
データテーブルを作成した後、データテーブルのロードに数秒かかります。この間、データテーブルに対するすべての読み取りおよび書き込み操作は失敗します。データテーブルがロードされた後に、データテーブルに対する操作を実行してください。
Tablestore はデータ暗号化機能を提供します。データテーブルを作成する際に暗号化関連のパラメータを設定することで、データのセキュリティを高め、コンプライアンス要件を満たすことができます。詳細については、暗号化テーブルを作成するを参照してください。
eコマース Web サイトのアイテム ID やフォーラムの投稿 ID など、自動インクリメント主キー列が必要なシナリオでは、データテーブルを作成する際に自動インクリメント主キー列を指定できます。詳細については、自動インクリメント主キー列を設定するを参照してください。
前提条件
Tablestore インスタンスが Tablestore コンソールで作成されていること。詳細については、インスタンスを作成するを参照してください。
OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスを初期化するを参照してください。
API 操作
/**
* 説明:指定されたテーブルスキーマに基づいてデータテーブルを作成します。
* データテーブルを作成した後、データテーブル内のパーティションをロードするために数秒かかります。パーティションがロードされた後にのみ、データテーブルに対する操作を実行できます。
* レスポンス:CreateTableResponse。
*/
CreateTableResponse createTable(CreateTableRequest createTableRequest) throws TableStoreException, ClientException
パラメータ
createTableRequest
に含まれるパラメータを次の表に示します。
パラメータ | 説明 |
tableMeta (必須) | データテーブルに関するスキーマ情報。次のパラメータを設定して、スキーマ情報を指定できます。
|
tableOptions (必須) | データテーブルに関する構成情報。次のパラメータを設定して、構成情報を指定できます。
|
indexMeta (オプション) | インデックスのリスト。各インデックスに対して次のパラメータを設定できます。
|
reservedThroughtput (オプション) | 予約読み取り/書き込みスループット。単位:キャパシティユニット(CU)。デフォルト値:0。 重要 高性能インスタンスのデータテーブルに対してのみ、予約読み取り/書き込みスループットを 0 以外の値に設定できます。 |
streamSpecification (オプション) | データテーブルに関する Stream 構成情報。次のパラメータを設定して、Stream 構成情報を指定できます。
|
sseSpecification (オプション) | データテーブルの暗号化設定。 重要 データテーブルを作成した後、データテーブルの暗号化設定を変更することはできません。 |
enableLocalTxn (オプション) | ローカルトランザクション機能を有効にするかどうかを指定します。デフォルト値:false。値 false は、ローカルトランザクション機能が無効になっていることを指定します。 重要
|
例
データテーブルを作成する
次のサンプルコードは、データテーブルを作成する方法の例を示しています。
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);
// ローカルトランザクション機能を有効にします。データテーブルに自動インクリメント主キー列を指定した場合、ローカル
参照
データテーブルを作成するために呼び出すことができるAPIオペレーションについては、CreateTableを参照してください。
データバージョンとTTL、セカンダリインデックス、予約済み読み取り/書き込みスループットについては、データバージョンとTTL、概要、および予約済み読み取り/書き込みスループットとはを参照してください。
データテーブルを作成した後、以下の操作を実行できます。
テーブルに対する操作。詳細については、テーブルに対する操作を参照してください。
データに対する操作。詳細については、データに対する基本操作を参照してください。