Tablestore SDK for Python を使用して、1 回のリクエストで 1 つ以上のテーブルに対して行の書き込み、更新、削除を実行します。
前提条件
Tablestore SDK for Python をインストールし、クライアントを初期化します。
機能の説明
batch_write_row を呼び出して、バッチ行操作を実行します。各行操作の結果は個別に返されます。
def batch_write_row(self, request)
次の例では、example_table に 2 行を書き込みます。
condition = Condition(RowExistenceExpectation.IGNORE)
row_items = [
PutRowItem(
Row([("partition", "device"), ("id", 1)], [("status", "online")]),
condition,
),
PutRowItem(
Row([("partition", "device"), ("id", 2)], [("status", "offline")]),
condition,
),
]
request = BatchWriteRowRequest()
request.add(TableInBatchWriteRowItem("example_table", row_items))
response = client.batch_write_row(request)
print(response.is_all_succeed())
1 回のバッチリクエストで最大 200 行をサポートし、すべての行の合計サイズは 4 MB を超えることはできません。サーバーがいずれかの操作で無効なパラメーターを検出した場合、パラメーターエラーを返し、バッチ内のいずれの操作も実行しません。
パラメーター
batch_write_row メソッドは、次のパラメーターを受け取ります。
|
名前 |
型 |
説明 |
|
request (必須) |
|
バッチ行操作リクエストです。 |
テーブル操作の設定
request.items[] の各要素は TableInBatchWriteRowItem 型で、次のパラメーターが含まれます。
|
名前 |
型 |
説明 |
|
table_name (必須) |
|
テーブル名です。 |
|
row_items (必須) |
|
行操作です。サポートされる型は |
行操作
row_items[] の各要素には、次の共通パラメーターが含まれます。
|
名前 |
型 |
説明 |
|
row (必須) |
|
行データです。 |
|
condition (必須) |
|
操作条件。詳細については、「条件付き更新を使用する」をご参照ください。行と列の値のチェックを省略するには、 |
|
return_type (任意) |
|
戻り値の型です。デフォルト値の |
ローカルトランザクション
request.set_transaction_id(transaction_id) を呼び出して、バッチリクエストにローカルトランザクション ID を含めます。ローカルトランザクションでは、リクエストに含めることができるのは、そのトランザクションに関連付けられたテーブルの行のみです。また、すべての行には、トランザクションの作成に使用されたパーティションキー値が必要です。詳細については、「ローカルトランザクションを使用する」をご参照ください。
レスポンス
batch_write_row は BatchWriteRowResponse を返します。結果を取得するには、次のメソッドを使用します。
|
メソッド |
戻り値の型 |
説明 |
|
|
|
すべての行操作が成功したかどうかを示します。 |
|
|
|
put の成功または失敗の結果です。 |
|
|
|
update の成功または失敗の結果です。 |
|
|
|
delete の成功または失敗の結果です。 |
|
|
|
指定したテーブルと操作タイプにおける、行ごとの結果です。 |
各 BatchWriteRowResponseItem には、成功ステータス、エラーコード、エラーメッセージ、消費 CU、プライマリキーが含まれます。
例
複数行の更新
次の例では、2 行の status 属性列を更新します。
condition = Condition(RowExistenceExpectation.EXPECT_EXIST)
row_items = [
UpdateRowItem(
Row([("partition", "device"), ("id", 1)], {"PUT": [("status", "online")]}),
condition,
),
UpdateRowItem(
Row([("partition", "device"), ("id", 2)], {"PUT": [("status", "online")]}),
condition,
),
]
request = BatchWriteRowRequest()
request.add(TableInBatchWriteRowItem("example_table", row_items))
response = client.batch_write_row(request)
複数行の削除
次の例では、2 行を削除します。
condition = Condition(RowExistenceExpectation.EXPECT_EXIST)
row_items = [
DeleteRowItem(Row([("partition", "device"), ("id", 1)]), condition),
DeleteRowItem(Row([("partition", "device"), ("id", 2)]), condition),
]
request = BatchWriteRowRequest()
request.add(TableInBatchWriteRowItem("example_table", row_items))
response = client.batch_write_row(request)
テーブルをまたいだ操作タイプの混在
次の例では、同一リクエストで example_table に 1 行を書き込み、another_table の 1 行を更新します。
put_row = Row(
[("partition", "device"), ("id", 3)],
[("status", "online")],
)
update_row = Row(
[("partition", "order"), ("id", 1)],
{"PUT": [("status", "processed")]},
)
request = BatchWriteRowRequest()
request.add(
TableInBatchWriteRowItem(
"example_table",
[PutRowItem(put_row, Condition(RowExistenceExpectation.IGNORE))],
)
)
request.add(
TableInBatchWriteRowItem(
"another_table",
[UpdateRowItem(update_row, Condition(RowExistenceExpectation.EXPECT_EXIST))],
)
)
response = client.batch_write_row(request)