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 つのプライマリキー列を設定できます。データはプライマリキーによって昇順にソートされます。最初のプライマリキー列はパーティションキーです。
プライマリキー列は、
STRING、INTEGER、およびBINARYデータ型をサポートします。パーティションキーではない INTEGER 型のプライマリキー列は、自動インクリメントプライマリキー列として設定できます。
definedColumns (任意)
List<DefinedColumnSchema>
テーブルの事前定義列。
事前定義列は、セカンダリインデックスと検索インデックスの作成に使用される属性列です。
サポートされるデータ型:
STRING、INTEGER、BINARY、DOUBLE、BOOLEAN。
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 日)。
enableStreamをtrueに設定した場合、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。
keyTypeがSSE_BYOKに設定されている場合、このパラメーターは必須です。roleArn (任意)
OptionalValue<String>
Resource Access Management (RAM) ロールの Alibaba Cloud リソースネーム (ARN)。
keyTypeがSSE_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);