Table Store提供了DeleteRow介面用於刪除單行資料以及BatchWriteRow介面用於大量刪除資料。
注意事項
刪除表資料,將導致資料不可恢複,請謹慎操作。
前提條件
已初始化Client。具體操作,請參見初始化OTSClient。
已建立資料表並寫入資料。
刪除單行資料
調用DeleteRow介面刪除一行資料。如果刪除的行不存在,則不會發生任何變化。
介面
// 刪除表中的一行。
// @param DeleteRowRequest 執行DeleteRow操作所需參數的封裝。
// @return DeleteRowResponse DeleteRow操作的響應內容。
DeleteRow(request *DeleteRowRequest) (*DeleteRowResponse, error)
參數
參數 | 是否必選 | 說明 |
TableName | 是 | 資料表名稱。 |
PrimaryKey | 是 | 行的主鍵。主鍵包括主鍵列名、主鍵類型和主索引值。 重要 設定的主鍵個數和類型必須和資料表的主鍵個數和類型一致。 |
Condition | 是 | 支援使用條件更新,可以設定原行的存在性條件或者原行中某列的列值條件。更多資訊,請參見條件更新。 |
樣本
以下樣本用於當原行存在且col2列值等於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
//如果忽略行判斷條件,請設定行存在性條件為RowExistenceExpectation_IGNORE。
//deleteRowReq.DeleteRowChange.SetCondition(tablestore.RowExistenceExpectation_IGNORE)
//如果期望行存在,請設定行存在性條件為RowExistenceExpectation_EXPECT_EXIST。
deleteRowReq.DeleteRowChange.SetCondition(tablestore.RowExistenceExpectation_EXPECT_EXIST)
//設定列條件為col2列值等於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")
}
}
詳細代碼請參見DeleteRow@GitHub。
大量刪除資料
根據實際情況選擇合適的方式查詢待刪除資料的主鍵資訊。
如果要刪除指定主鍵範圍內的資料,請調用GetRange介面,查詢指定主鍵範圍內的資料,並擷取待刪除資料的主鍵資訊。具體操作,請參見範圍讀取資料。
如果要刪除滿足指定條件的資料,請建立多元索引後,使用多元索引查詢滿足指定條件的資料,並擷取待刪除資料的主鍵資訊。具體操作,請參見建立多元索引和通過SDK使用多元索引。
調用BatchWriteRow介面,根據主鍵資訊大量刪除資料。更多資訊,請參見批量寫入資料。
以下樣本用於刪除一個資料表中主鍵列pk值為
"pk"
的行資料以及刪除另一個資料表中第一列主鍵pk1值為"pk1"
且第二列主鍵pk2值為"pk2"
的行資料。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") } }
相關文檔
如果要刪除指定天數之前的資料,您可以通過為資料表配置資料生命週期的方式自動清理到期資料。具體操作,請參見資料版本和生命週期。