すべてのプロダクト
Search
ドキュメントセンター

Tablestore:一括更新データ

最終更新日:Mar 31, 2026

Tablestore の Python SDK を使用して、単一のリクエストで複数の Tablestore テーブルに対して、データの挿入 (Put)、更新 (Update)、削除 (Delete) といったバッチ書き込み操作を実行します。

注意事項

  • リクエスト内のいずれかの操作にパラメーターの誤りがある場合、サーバーは例外をスローし、すべての操作が実行されません。

  • 単一のバッチ書き込みリクエストでは、最大 200 行をサポートしており、全行の合計データサイズは 4 MB を超えてはなりません。

  • 単一のリクエスト内で同一テーブルに対して add メソッドを複数回呼び出した場合、最後の呼び出しのみが有効になります。

前提条件

Tablestore クライアントの初期化

メソッド

def batch_write_row(self, request)

リクエストパラメーター

  • items (必須) List[TableInBatchWriteRowItem]: 実行する操作のリストです。リスト内の各項目は特定のテーブルを対象とし、以下のパラメーターを含みます:

    パラメーター

    説明

    table_name (必須)

    str

    テーブル名です。

    row_items (必須)

    RowItem

    テーブルに対して実行するデータ操作です。挿入 (Put)、更新 (Update)、削除 (Delete) 操作を含みます。

  • transaction_id (任意) str: ローカルトランザクションの固有 ID です。詳細については、「ローカルトランザクション」をご参照ください。

サンプルコード

以下のサンプルコードでは、バッチ書き込み操作を使用して test_table テーブルに 1 行を挿入します。

try:
    # リクエストを構築します。
    request = BatchWriteRowRequest()

    put_row_items = []
    # PutRowItem を構築します。
    put_pk = [('id', 'row1')]
    put_columns = []
    put_row = Row(put_pk, put_columns)
    # 書き込み操作には必ず条件を指定する必要があります。「RowExistenceExpectation.IGNORE」は、行の存在チェックを行わないことを意味します。
    put_row_item = PutRowItem(put_row, Condition(RowExistenceExpectation.IGNORE))
    put_row_items.append(put_row_item)

    request.add(TableInBatchWriteRowItem('test_table', put_row_items))

    # batch_write_row メソッドを呼び出してバッチ操作を実行します。
    response = client.batch_write_row(request)

    # 応答を処理します。
    # 挿入 (Put) 行
    for table_name,put_rows in response.table_of_put.items():
        for item in put_rows:
            if not item.is_ok:
                print('テーブル名: %s。行の挿入に失敗しました。エラーメッセージ: %s' % (table_name, item.error_message))
    # 更新 (Update) 行
    for table_name, update_rows in response.table_of_update.items():
        for item in update_rows:
            if not item.is_ok:
                print('テーブル名: %s。行の更新に失敗しました。エラーメッセージ: %s。' % (table_name, item.error_message))
    # 削除 (Delete) 行
    for table_name, delete_rows in response.table_of_delete.items():
        for item in delete_rows:
            if not item.is_ok:
                print('テーブル名: %s。行の削除に失敗しました。エラーメッセージ: %s' % (table_name, item.error_message))
except Exception as e:
    print('バッチ書き込み操作に失敗しました。エラー: %s' % e)

以下の例では、さまざまな種類のデータ操作を示します。

  • PutRowItem: 行データの挿入

    put_row_items = []
    # PutRowItem を構築します。
    put_pk = [('id', 'row1')]
    put_columns = []
    put_row = Row(put_pk, put_columns)
    # 書き込み操作には必ず条件を指定する必要があります。「RowExistenceExpectation.IGNORE」は、行の存在チェックを行わないことを意味します。
    put_row_item = PutRowItem(put_row, Condition(RowExistenceExpectation.IGNORE))
    put_row_items.append(put_row_item)
    
    request.add(TableInBatchWriteRowItem('test_table', put_row_items))

    行データを挿入する際に属性列を追加します。

    # 属性列
    put_columns = [('col1','val1')]
    # カスタムタイムスタンプ付きの属性列
    put_columns = [('col1','val1', int(time.time() * 1000))]
  • UpdateRowItem: 行データの更新。この項目を使用すると、属性列の値を変更したり、属性列を追加したり、特定の属性列バージョンを削除したり、属性列全体を削除したりできます。

    update_row_items = []
    # UpdateRowItem を構築します。
    update_pk = [('id', 'row1')]
    update_columns = {
        'PUT': [('col1', 'changed_val1')]
    }
    update_row = Row(update_pk, update_columns)
    # 更新操作には必ず条件を指定する必要があります。「RowExistenceExpectation.IGNORE」は、行の存在チェックを行わないことを意味します。
    update_row_item = UpdateRowItem(update_row, Condition(RowExistenceExpectation.IGNORE))
    update_row_items.append(update_row_item)
    
    request.add(TableInBatchWriteRowItem('test_table', update_row_items))

    行データを更新する際に属性列を追加または削除します。

    # 属性列の追加
    update_columns = {
        'PUT': [('col3', 'val3')]
    }
    # カスタムタイムスタンプ付きの属性列の追加
    update_columns = {
        'PUT': [('col4', 'val4', int(time.time() * 1000))]
    }
    # 属性列の削除
    update_columns = {
        'DELETE_ALL': ['col2']
    }
  • DeleteRowItem: 行データの削除

    delete_row_items = []
    # DeleteRowItem を構築します。
    delete_pk = [('id', 'row1')]
    delete_row = Row(delete_pk, [])
    # 削除操作には必ず条件を指定する必要があります。「RowExistenceExpectation.IGNORE」は、行の存在チェックを行わないことを意味します。
    delete_row_item = DeleteRowItem(delete_row, Condition(RowExistenceExpectation.IGNORE))
    delete_row_items.append(delete_row_item)
    
    request.add(TableInBatchWriteRowItem('test_table', delete_row_items))
  • 単一テーブルに対する複数の操作の実行例

    request = BatchWriteRowRequest()
    table_batch_items = TableInBatchWriteRowItem('<TABLE_NAME>', put_row_items)
    table_batch_items.row_items += delete_row_items
    request.add(table_batch_items)

関連ドキュメント