Tablestore SDK for Java を使用して Wide Column モデルのテーブルを作成し、同一リクエストでスキーマ、データバージョン、インデックス、ストリーム、暗号化を設定します。
前提条件
Tablestore SDK for Java をインストールし、クライアントを初期化します。
説明
createTable を呼び出して Wide Column モデルのテーブルを作成します。リクエストには、少なくとも 1 つのプライマリキー列を含め、生存期間 (TTL) と最大バージョン数を指定する必要があります。
public CreateTableResponse createTable(CreateTableRequest createTableRequest) throws TableStoreException, ClientException次の例では、example_table という名前のテーブルを作成します。このテーブルには STRING 型のプライマリキー列が 1 つあり、データは期限切れにならず、保持されるデータバージョンは 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 (必須) |
| テーブルのスキーマ。 |
tableOptions (必須) |
| テーブルのデータバージョンおよび更新設定。 |
reservedThroughput (任意) |
| キャパシティーユニット (CU) 単位の予約済みの読み取り/書き込みスループット。読み取り CU と書き込み CU のデフォルト値はいずれも |
indexMeta (任意) |
| テーブルと同時に作成するセカンダリインデックス。 |
streamSpecification (任意) |
| ストリームの設定。 |
enableLocalTxn (任意) |
| ローカルトランザクションを有効にするかどうかを指定します。デフォルト値: |
sseSpecification (任意) |
| データ暗号化の設定。データ暗号化はテーブル作成時にのみ有効化できます。テーブル作成後は、暗号化を無効化したり、設定を変更したりすることはできません。 |
テーブルスキーマ
tableMeta は TableMeta オブジェクトで、次のパラメータが含まれます。
名前 | 型 | 説明 |
tableName (必須) |
| テーブル名。 |
primaryKey (必須) |
| プライマリキー列の設定。プライマリキー列は 1~4 列を設定できます。最初のプライマリキー列はパーティションキーであり、データはプライマリキーの昇順でソートされます。 |
definedColumns (任意) |
| 事前定義列の設定。事前定義列は、セカンダリインデックスおよび検索インデックスの作成に使用できます。 |
プライマリキー列
tableMeta.primaryKey[] の各要素は PrimaryKeySchema オブジェクトで、次のパラメータが含まれます。
名前 | 型 | 説明 |
name (必須) |
| プライマリキー列の名前。 |
type (必須) |
| プライマリキー列の型。有効な値: |
option (任意) |
| プライマリキー列のオプション。自動採番主キー列を使用するには、パーティションキーではない |
事前定義列
tableMeta.definedColumns[] の各要素は DefinedColumnSchema オブジェクトで、次のパラメータが含まれます。
名前 | 型 | 説明 |
name (必須) |
| 事前定義列の名前。 |
type (必須) |
| 事前定義列の型。有効な値: |
テーブル設定
tableOptions は TableOptions オブジェクトで、次のパラメータが含まれます。
名前 | 型 | 説明 |
timeToLive (必須) |
| データの生存期間 (TTL) (秒)。このパラメータを |
maxVersions (必須) |
| 属性列ごとに保持する最大バージョン数。検索インデックスまたはセカンダリインデックスを使用するには、このパラメータを |
maxTimeDeviation (任意) |
| 最大バージョンオフセット (秒)。デフォルト値: |
allowUpdate (任意) |
|
|
updateFullRow (optional) |
| Specifies whether to enable whole-row updates. Default value: |
予約済みの読み取り/書き込みスループット
reservedThroughput は ReservedThroughput オブジェクトで、次のパラメータが含まれます。
名前 | 型 | 説明 |
capacityUnit (必須) |
| 予約済みの読み取り/書き込みスループットの設定。 |
キャパシティーユニット
reservedThroughput.capacityUnit は CapacityUnit オブジェクトで、次のパラメータが含まれます。
名前 | 型 | 説明 |
readCapacityUnit (必須) |
| 予約済み読み取りスループット (CU)。 |
writeCapacityUnit (必須) |
| 予約済み書き込みスループット (CU)。 |
セカンダリインデックス
indexMeta[] の各要素は IndexMeta オブジェクトで、次のパラメータが含まれます。
名前 | 型 | 説明 |
indexName (必須) |
| インデックス名。 |
primaryKey (必須) |
| インデックスのプライマリキー列。テーブルのプライマリキー列と事前定義列で構成できます。ローカルセカンダリインデックスの場合、最初のプライマリキー列はテーブルの最初のプライマリキー列と一致している必要があります。 |
definedColumns (任意) |
| インデックスに含める事前定義列。テーブルの事前定義列である必要があります。 |
indexType (任意) |
| インデックスのタイプ。有効な値: |
indexUpdateMode (任意) |
| インデックスの更新モード。グローバルセカンダリインデックスは |
ストリーム設定
streamSpecification は StreamSpecification オブジェクトで、次のパラメータが含まれます。
名前 | 型 | 説明 |
enableStream (必須) |
| ストリームを有効にするかどうかを指定します。デフォルト値: |
expirationTime (任意) |
| 増分ログの保持期間 (単位: 時間)。最大値: |
ローカルトランザクション設定
enableLocalTxn は Boolean 値です。このパラメーターを設定する際は、以下の制限にご留意ください。
ローカルトランザクションは、Tablestore SDK for Java 5.11.0 以降でのみサポートされています。
ローカルトランザクションと自動採番主キー列は併用できません。自動採番主キー列が設定されている場合、ローカルトランザクションを有効にしても適用されません。
既存のテーブルでローカルトランザクションを有効にするには、チケットを送信。
サーバーサイド暗号化設定
sseSpecification は SSESpecification オブジェクトで、次のパラメータが含まれます。
名前 | 型 | 説明 |
enable (必須) |
| データ暗号化を有効にするかどうかを指定します。デフォルト値: |
keyType (任意) |
| 暗号化の種類。有効な値: |
keyId (任意) |
| カスタマーマスターキー (CMK) の ID。このパラメータは Bring Your Own Key (BYOK) による暗号化で必須です。 |
roleArn (任意) |
| Resource Access Management (RAM) ロールの Alibaba Cloud リソースネーム (ARN)。このパラメータは Bring Your Own Key (BYOK) による暗号化で必須です。 |
例
テーブルスキーマとデータバージョンの設定
次の例では、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);