Utilize o Tablestore SDK for Python para gravar, atualizar e excluir linhas em uma ou mais tabelas com uma única solicitação.
Pré-requisitos
Instale o Tablestore SDK for Python e inicialize um cliente.
Descrição da função
Chame batch_write_row para executar operações em lote nas linhas. O resultado de cada operação é retornado de forma independente.
def batch_write_row(self, request)
O exemplo a seguir grava duas linhas na tabela example_table.
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())
Uma única solicitação em lote aceita até 200 linhas, e o tamanho total não pode exceder 4 MB. Caso o servidor detecte um parâmetro inválido em qualquer operação, ele retornará um erro de parâmetro e nenhuma operação do lote será executada.
Parâmetros
O método batch_write_row possui o seguinte parâmetro.
|
Nome |
Tipo |
Descrição |
|
request (obrigatório) |
|
Solicitação de operação em lote de linhas. Chame |
Configurações de operação da tabela
Cada elemento em request.items[] é do tipo TableInBatchWriteRowItem e contém os seguintes parâmetros.
|
Nome |
Tipo |
Descrição |
|
table_name (obrigatório) |
|
Nome da tabela. |
|
row_items (obrigatório) |
|
Operações de linha. Os tipos suportados são |
Operações de linha
Cada elemento em row_items[] contém os seguintes parâmetros comuns.
|
Nome |
Tipo |
Descrição |
|
row (obrigatório) |
|
Dados da linha. Para |
|
condition (obrigatório) |
|
Condição da operação. Para mais informações, consulte Use conditional updates. Para ignorar as verificações de valores de linha e coluna, use |
|
return_type (opcional) |
|
Tipo de retorno. |
Transações locais
Chame request.set_transaction_id(transaction_id) para incluir um ID de transação local na solicitação em lote. Em uma transação local, a solicitação pode conter apenas linhas da tabela associada à transação, e todas as linhas devem ter o valor da chave de partição usado para criar a transação. Para mais detalhes, veja Use local transactions.
Resposta
batch_write_row retorna um objeto BatchWriteRowResponse. Utilize os métodos abaixo para obter os resultados.
|
Método |
Tipo de retorno |
Descrição |
|
|
|
Indica se todas as operações de linha foram bem-sucedidas. |
|
|
|
Resultados de inserção com sucesso ou falha. |
|
|
|
Resultados de atualização com sucesso ou falha. |
|
|
|
Resultados de exclusão com sucesso ou falha. |
|
|
|
Resultados por linha para a tabela e o tipo de operação especificados. |
Cada BatchWriteRowResponseItem contém o status de sucesso, código de erro, mensagem de erro, CUs consumidos e chave primária.
Exemplos
Atualizar várias linhas
Este exemplo atualiza a coluna de atributo status em duas linhas.
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)
Excluir várias linhas
O exemplo a seguir exclui duas linhas.
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)
Combinar tipos de operação entre tabelas
Neste cenário, uma linha é gravada em example_table e outra é atualizada em another_table na mesma solicitação.
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)