全部產品
Search
文件中心

Tablestore:刪除資料

更新時間:Nov 21, 2024

Table Store提供了DeleteRow介面用於刪除單行資料以及BatchWriteRow介面用於大量刪除資料。

注意事項

刪除表資料,將導致資料不可恢複,請謹慎操作。

前提條件

刪除單行資料

調用DeleteRow介面刪除一行資料。如果刪除的行不存在,則不會發生任何變化。

介面

"""
說明:刪除一行資料。
``table_name``是對應的表名。
``primary_key``表示主鍵。
``condition``表示執行操作前做條件檢查,滿足條件才執行,是tablestore.metadata.Condition類的執行個體。
目前支援兩種條件檢測,一是對行的存在性進行檢查,檢查條件包括:'IGNORE','EXPECT_EXIST'和'EXPECT_NOT_EXIST';二是對屬性列值的條件檢測。
返回:本次操作消耗的CapacityUnit和需要返回的行資料return_row。
consumed表示消耗的CapacityUnit,是tablestore.metadata.CapacityUnit類的執行個體。
return_row表示需要返回的行資料。
樣本:
    primary_key = [('gid',1), ('uid',101)]
    condition = Condition('IGNORE')
    consumed, return_row = client.delete_row('myTable', primary_key, condition)
"""
def delete_row(self, table_name, primary_key, condition, return_type = None, transaction_id = None):

參數

參數

是否必選

說明

table_name

資料表名稱。

primary_key

行的主鍵。主鍵包括主鍵列名、主鍵類型和主索引值。

重要

設定的主鍵個數和類型必須和資料表的主鍵個數和類型一致。

condition

支援使用條件更新,可以設定原行的存在性條件或者原行中某列的列值條件。更多資訊,請參見條件更新

return_type

返回資料的類型。

transaction_id

局部事務ID。使用局部事務功能刪除資料時必須設定此參數。

樣本

以下樣本用於刪除一行資料。

# 設定資料表名稱。
table_name = '<TABLE_NAME>'
# 構造行主鍵。
primary_key = [('gid', 1), ('uid', '101')]
row = Row(primary_key)
condition = Condition('IGNORE')
try:
    consumed, return_row = client.delete_row(table_name, row, condition)
    print('Delete succeed, consume %s write cu.' % consumed.write)
# 用戶端異常,一般為參數錯誤或者網路異常。
except OTSClientError as e:
    print("Delete row failed, http_status:%d, error_message:%s" % (e.get_http_status(), e.get_error_message()))
# 服務端異常,一般為參數錯誤或者流控錯誤。
except OTSServiceError as e:
    print("Delete row failed, http_status:%d, error_code:%s, error_message:%s, request_id:%s" % (
    e.get_http_status(), e.get_error_code(), e.get_error_message(), e.get_request_id()))

詳細代碼請參見DeleteRow@GitHub

大量刪除資料

  1. 根據實際選擇合適的方式查詢待刪除資料的主鍵資訊。

    • 如果要刪除指定主鍵範圍內的資料,請調用GetRange介面,查詢指定主鍵範圍內的資料,並擷取待刪除資料的主鍵資訊。具體操作,請參見範圍讀取資料

    • 如果要刪除滿足指定條件的資料,請建立多元索引後,使用多元索引查詢滿足指定條件的資料,並擷取待刪除資料的主鍵資訊。具體操作,請參見建立多元索引通過SDK使用多元索引

  2. 調用BatchWriteRow介面,根據主鍵資訊大量刪除資料。更多資訊,請參見批量寫入資料

常見問題

1. Table StorePython SDK 6.0.0刪除單行資料報錯。

推薦以下兩種方式解決此問題。

  • 升級Table StorePython SDK的版本。

  • 修改刪除資料方法的參數。

    # 設定資料表名稱。
    table_name = '<TABLE_NAME>'
    # 構造行主鍵。
    primary_key = [('gid', 1), ('uid', '101')]
    condition = Condition('IGNORE')
    try:
        consumed, return_row = client.delete_row(table_name, primary_key, condition)
        print('Delete succeed, consume %s write cu.' % consumed.write)
    # 用戶端異常,一般為參數錯誤或者網路異常。
    except OTSClientError as e:
        print("Delete row failed, http_status:%d, error_message:%s" % (e.get_http_status(), e.get_error_message()))
    # 服務端異常,一般為參數錯誤或者流控錯誤。
    except OTSServiceError as e:
        print("Delete row failed, http_status:%d, error_code:%s, error_message:%s, request_id:%s" % (
        e.get_http_status(), e.get_error_code(), e.get_error_message(), e.get_request_id()))

相關文檔

如果要刪除指定天數之前的資料,您可以通過為資料表配置資料生命週期的方式自動清理到期資料。具體操作,請參見資料版本和生命週期