O Tablestore oferece a operação DeleteRow para excluir uma única linha e a operação BatchWriteRow para excluir várias linhas.
Observações de uso
Não é possível restaurar dados excluídos. Proceda com cautela.
Pré-requisitos
Instância OTSClient inicializada. Para mais informações, consulte Inicializar uma instância OTSClient.
Tabela de dados criada com dados gravados.
Excluir uma única linha de dados
Chame a operação DeleteRow para excluir uma única linha de dados. Se a linha alvo não existir, a tabela de dados permanecerá inalterada.
Operação da API
// Delete a row of data from a table.
// @param DeleteRowRequest Encapsulate the parameters required to call the DeleteRow operation.
// @return DeleteRowResponse The content of the response to the DeleteRow operation.
DeleteRow(request *DeleteRowRequest) (*DeleteRowResponse, error)
Parâmetros
|
Parâmetro |
Obrigatório |
Descrição |
|
TableName |
Sim |
Nome da tabela de dados. |
|
PrimaryKey |
Sim |
Chave primária da linha. O valor deste parâmetro consiste no nome, tipo e valor de cada coluna de chave primária. Importante
A quantidade e os tipos das colunas de chave primária especificados devem corresponder exatamente à quantidade e aos tipos reais das colunas de chave primária na tabela. |
|
Condition |
Sim |
Condição necessária para executar a operação. Configure uma condição de existência de linha ou uma condição baseada em valores de coluna. Para mais informações, consulte Atualização condicional. |
Código de exemplo
O código abaixo exemplifica como excluir uma linha de uma tabela de dados quando a linha existe e o valor da coluna col2 é igual a 3:
func DeleteRowWithCondition(client *tablestore.TableStoreClient, tableName string) {
deleteRowReq := new(tablestore.DeleteRowRequest)
deleteRowReq.DeleteRowChange = new(tablestore.DeleteRowChange)
deleteRowReq.DeleteRowChange.TableName = tableName
deletePk := new(tablestore.PrimaryKey)
deletePk.AddPrimaryKeyColumn("pk1", "pk1value1")
deletePk.AddPrimaryKeyColumn("pk2", int64(2))
deletePk.AddPrimaryKeyColumn("pk3", []byte("pk3"))
deleteRowReq.DeleteRowChange.PrimaryKey = deletePk
// If you do not want the system to perform a row existence check, specify RowExistenceExpectation_IGNORE.
//deleteRowReq.DeleteRowChange.SetCondition(tablestore.RowExistenceExpectation_IGNORE)
// If the row is expected to exist, specify RowExistenceExpectation_EXPECT_EXIST.
deleteRowReq.DeleteRowChange.SetCondition(tablestore.RowExistenceExpectation_EXPECT_EXIST)
// Specify a condition based on column values. In this example, specify that the condition based on column values is met if the value of the col2 column is 3.
clCondition1 := tablestore.NewSingleColumnCondition("col2", tablestore.CT_EQUAL, int64(3))
deleteRowReq.DeleteRowChange.SetColumnCondition(clCondition1)
_, err := client.DeleteRow(deleteRowReq)
if err != nil {
fmt.Println("delete failed with error:", err)
} else {
fmt.Println("delete row finished")
}
}
Para visualizar o código de exemplo completo, acesse DeleteRow@GitHub.
Excluir várias linhas de dados simultaneamente
-
Selecione um método adequado aos seus requisitos de negócio para consultar as informações de chave primária dos dados a serem excluídos.
Para excluir dados cujos valores de chave primária estejam dentro de um intervalo específico, chame a operação GetRange para consultar os dados e obter as informações de chave primária. Para mais informações, consulte Ler dados cujos valores de chave primária estão dentro de um intervalo específico.
Para excluir dados que atendam a condições específicas de uma tabela com índice de pesquisa, utilize o índice para consultar os dados e obter as informações de chave primária. Para mais informações, consulte Consulta básica.
-
Para remover todos os dados de uma tabela, recomenda-se excluir a tabela e criar outra com as mesmas configurações.
Alternativamente, chame a operação GetRange definindo a chave primária inicial como INF_MIN e a final como INF_MAX para varrer todos os dados da tabela e obter suas informações de chave primária. No entanto, essa abordagem consome muitos recursos computacionais. Proceda com cautela.
-
Chame a operação BatchWriteRow para excluir várias linhas simultaneamente com base nas informações de chave primária. Para mais informações, consulte Gravar várias linhas de dados simultaneamente.
O código abaixo exemplifica como excluir simultaneamente uma linha em que o valor da coluna de chave primária pk é
pkde uma tabela e uma linha em que o valor da coluna de chave primária pk1 épk1e o valor da coluna de chave primária pk2 épk2de outra tabela:func BatchWriteRowWithCondition(client *tablestore.TableStoreClient) { batchWriteReq := &tablestore.BatchWriteRowRequest{} deleteRowChange := new(tablestore.DeleteRowChange) deleteRowChange.TableName = "<TABLE_NAME1>" deletePk := new(tablestore.PrimaryKey) deletePk.AddPrimaryKeyColumn("pk", "pk") deleteRowChange.PrimaryKey = deletePk deleteRowChange.SetCondition(tablestore.RowExistenceExpectation_IGNORE) batchWriteReq.AddRowChange(deleteRowChange) deleteRowChange2 := new(tablestore.DeleteRowChange) deleteRowChange2.TableName = "<TABLE_NAME2>" deletePk2 := new(tablestore.PrimaryKey) deletePk2.AddPrimaryKeyColumn("pk1", "pk1") deletePk2.AddPrimaryKeyColumn("pk1", "pk2") deleteRowChange2.PrimaryKey = deletePk2 deleteRowChange2.SetCondition(tablestore.RowExistenceExpectation_EXPECT_EXIST) batchWriteReq.AddRowChange(deleteRowChange2) response, err := client.BatchWriteRow(batchWriteReq) if err != nil { fmt.Println("batch request failed with:", response) } else { fmt.Println("batch write row finished") } }
Referências
O tempo de vida (TTL) define o período de retenção dos dados. Configure o TTL da tabela de dados para excluir automaticamente os dados expirados. Para mais informações, consulte Versões de dados e TTL.