刪除數(shù)據(jù)
表格存儲(chǔ)提供了DeleteRow接口用于刪除單行數(shù)據(jù)以及BatchWriteRow接口用于批量刪除數(shù)據(jù)。
注意事項(xiàng)
刪除表數(shù)據(jù),將導(dǎo)致數(shù)據(jù)不可恢復(fù),請(qǐng)謹(jǐn)慎操作。
前提條件
已初始化Client。具體操作,請(qǐng)參見(jiàn)初始化OTSClient。
已創(chuàng)建數(shù)據(jù)表并寫(xiě)入數(shù)據(jù)。
刪除單行數(shù)據(jù)
調(diào)用DeleteRow接口刪除一行數(shù)據(jù)。如果刪除的行不存在,則不會(huì)發(fā)生任何變化。
接口
// 刪除表中的一行。
// @param DeleteRowRequest 執(zhí)行DeleteRow操作所需參數(shù)的封裝。
// @return DeleteRowResponse DeleteRow操作的響應(yīng)內(nèi)容。
DeleteRow(request *DeleteRowRequest) (*DeleteRowResponse, error)
參數(shù)
參數(shù) | 是否必選 | 說(shuō)明 |
TableName | 是 | 數(shù)據(jù)表名稱。 |
PrimaryKey | 是 | 行的主鍵。主鍵包括主鍵列名、主鍵類型和主鍵值。 重要 設(shè)置的主鍵個(gè)數(shù)和類型必須和數(shù)據(jù)表的主鍵個(gè)數(shù)和類型一致。 |
Condition | 是 | 支持使用條件更新,可以設(shè)置原行的存在性條件或者原行中某列的列值條件。更多信息,請(qǐng)參見(jiàn)條件更新。 |
示例
以下示例用于當(dāng)原行存在且col2列值等于3時(shí)刪除數(shù)據(jù)表中的指定行。
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
//如果忽略行判斷條件,請(qǐng)?jiān)O(shè)置行存在性條件為RowExistenceExpectation_IGNORE。
//deleteRowReq.DeleteRowChange.SetCondition(tablestore.RowExistenceExpectation_IGNORE)
//如果期望行存在,請(qǐng)?jiān)O(shè)置行存在性條件為RowExistenceExpectation_EXPECT_EXIST。
deleteRowReq.DeleteRowChange.SetCondition(tablestore.RowExistenceExpectation_EXPECT_EXIST)
//設(shè)置列條件為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")
}
}
詳細(xì)代碼請(qǐng)參見(jiàn)DeleteRow@GitHub。
批量刪除數(shù)據(jù)
根據(jù)實(shí)際情況選擇合適的方式查詢待刪除數(shù)據(jù)的主鍵信息。
如果要?jiǎng)h除指定主鍵范圍內(nèi)的數(shù)據(jù),請(qǐng)調(diào)用GetRange接口,查詢指定主鍵范圍內(nèi)的數(shù)據(jù),并獲取待刪除數(shù)據(jù)的主鍵信息。具體操作,請(qǐng)參見(jiàn)范圍讀取數(shù)據(jù)。
如果要?jiǎng)h除滿足指定條件的數(shù)據(jù),請(qǐng)創(chuàng)建多元索引后,使用多元索引查詢滿足指定條件的數(shù)據(jù),并獲取待刪除數(shù)據(jù)的主鍵信息。具體操作,請(qǐng)參見(jiàn)創(chuàng)建多元索引和通過(guò)SDK使用多元索引。
調(diào)用BatchWriteRow接口,根據(jù)主鍵信息批量刪除數(shù)據(jù)。更多信息,請(qǐng)參見(jiàn)批量寫(xiě)入數(shù)據(jù)。
以下示例用于刪除一個(gè)數(shù)據(jù)表中主鍵列pk值為
"pk"
的行數(shù)據(jù)以及刪除另一個(gè)數(shù)據(jù)表中第一列主鍵pk1值為"pk1"
且第二列主鍵pk2值為"pk2"
的行數(shù)據(jù)。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") } }
相關(guān)文檔
如果要?jiǎng)h除指定天數(shù)之前的數(shù)據(jù),您可以通過(guò)為數(shù)據(jù)表配置數(shù)據(jù)生命周期的方式自動(dòng)清理過(guò)期數(shù)據(jù)。具體操作,請(qǐng)參見(jiàn)數(shù)據(jù)版本和生命周期。