Tablestore SDK for Java を使用して、Wide Column モデルのテーブルに行を書き込み、または更新します。
前提条件
Tablestore SDK for Java をインストールし、クライアントを初期化します。
概要
putRow を呼び出して、プライマリキーで識別される行に属性列を書き込みます。行が存在する場合、Tablestore は対応する属性列のバージョンを追加または上書きします。condition を使用して、書き込みを実行するかどうかを制御できます。
public PutRowResponse putRow(PutRowRequest putRowRequest) throws TableStoreException, ClientException
次の例では、put_row_demo テーブルに、プライマリキー列 id を row1 に、属性列 col1 を val1 に設定して行を書き込みます。
String tableName = "put_row_demo";
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row1"));
PrimaryKey primaryKey = primaryKeyBuilder.build();
RowPutChange rowPutChange = new RowPutChange(tableName, primaryKey);
rowPutChange.addColumn("col1", ColumnValue.fromString("val1"));
client.putRow(new PutRowRequest(rowPutChange));
パラメーター
PutRowRequest には、次のパラメーターが含まれます。
|
名前 |
型 |
説明 |
|
rowChange (必須) |
|
行の書き込み設定。 |
|
transactionId (任意) |
|
ローカルトランザクション ID。このパラメーターは、ローカルトランザクションでデータを書き込む場合にのみ設定します。 ID の取得方法と使用方法の詳細については、「ローカルトランザクションの使用」をご参照ください。 |
行の変更
rowChange は RowPutChange 型で、次のパラメーターが含まれます。
|
名前 |
型 |
説明 |
|
tableName (必須) |
|
テーブルの名前。 |
|
primaryKey (必須) |
|
行のプライマリキー。プライマリキー列の名前、順序、型はテーブルスキーマと一致する必要があります。プライマリキー列は、 |
|
columnsToPut (任意) |
|
書き込む属性列。 |
|
condition (任意) |
|
書き込み条件。デフォルトでは、Tablestore は行が存在するかどうかをチェックしません。 条件の設定方法の詳細については、「条件付き更新の使用」をご参照ください。 |
|
returnType (任意) |
|
戻り値の型。デフォルト値は |
属性列
rowChange.columnsToPut[] の各要素は Column 型で、次のパラメーターが含まれます。
|
名前 |
型 |
説明 |
|
name (必須) |
|
属性列の名前。 |
|
value (必須) |
|
属性列の値。対応している型は、 |
|
timestamp (任意) |
|
データバージョン番号。単位:ミリ秒。このパラメーターを指定しない場合、サーバーが値を生成します。 |
例
複数の属性列の書き込み
この例では、列ごとに addColumn を呼び出す方法と、準備した List<Column> を 1 回の呼び出しで渡す方法の両方を示します。
String tableName = "put_row_demo";
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row2"));
PrimaryKey primaryKey = primaryKeyBuilder.build();
RowPutChange rowPutChange = new RowPutChange(tableName, primaryKey);
// オプション 1: addColumn で列を 1 つずつ追加
rowPutChange.addColumn("name", ColumnValue.fromString("Alice"));
rowPutChange.addColumn("age", ColumnValue.fromLong(30));
rowPutChange.addColumn("active", ColumnValue.fromBoolean(true));
// オプション 2: 1 回の呼び出しで List<Column> を渡す
List<Column> columns = new ArrayList<>();
columns.add(new Column("score", ColumnValue.fromDouble(95.5)));
columns.add(new Column("city", ColumnValue.fromString("Hangzhou")));
rowPutChange.addColumns(columns);
client.putRow(new PutRowRequest(rowPutChange));
データバージョンの指定
列を書き込むときにカスタムデータバージョンを設定するには、addColumn(name, value, timestamp) を使用します。
String tableName = "put_row_demo";
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("id", PrimaryKeyValue.fromString("row3"));
PrimaryKey primaryKey = primaryKeyBuilder.build();
RowPutChange rowPutChange = new RowPutChange(tableName, primaryKey);
long timestamp = System.currentTimeMillis();
rowPutChange.addColumn("col1", ColumnValue.fromString("val1"), timestamp);
client.putRow(new PutRowRequest(rowPutChange));
自動インクリメント列のプライマリキーの取得
自動インクリメントプライマリキー列の場合、列の値をプレースホルダー PrimaryKeyValue.AUTO_INCREMENT に設定します。実際の値はサーバーが書き込み時に生成します。レスポンスで生成された値を取得するには、書き込み前に setReturnType(ReturnType.RT_PK) を呼び出し、書き込み処理が完了した後に response.getRow() を呼び出します。
String tableName = "put_row_auto_inc_demo";
PrimaryKeyBuilder primaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
primaryKeyBuilder.addPrimaryKeyColumn("partition_key", PrimaryKeyValue.fromString("pk1"));
primaryKeyBuilder.addPrimaryKeyColumn("auto_id", PrimaryKeyValue.AUTO_INCREMENT);
PrimaryKey primaryKey = primaryKeyBuilder.build();
RowPutChange rowPutChange = new RowPutChange(tableName, primaryKey);
rowPutChange.addColumn("payload", ColumnValue.fromString("hello"));
rowPutChange.setReturnType(ReturnType.RT_PK);
PutRowResponse response = client.putRow(new PutRowRequest(rowPutChange));
Row returnedRow = response.getRow();
System.out.println("Returned PK: " + returnedRow.getPrimaryKey());