Table Store提供了DeleteRow介面用於刪除單行資料以及BatchWriteRow介面用於大量刪除資料。
注意事項
刪除表資料,將導致資料不可恢複,請謹慎操作。
前提條件
已初始化OTSClient。具體操作,請參見初始化OTSClient。
刪除單行資料
調用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。
大量刪除資料
根據實際選擇合適的方式查詢待刪除資料的主鍵資訊。
如果要刪除指定主鍵範圍內的資料,請調用GetRange介面,查詢指定主鍵範圍內的資料,並擷取待刪除資料的主鍵資訊。具體操作,請參見範圍讀取資料。
如果要刪除滿足指定條件的資料,請建立多元索引後,使用多元索引查詢滿足指定條件的資料,並擷取待刪除資料的主鍵資訊。具體操作,請參見建立多元索引和通過SDK使用多元索引。
調用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()))
相關文檔
如果要刪除指定天數之前的資料,您可以通過為資料表配置資料生命週期的方式自動清理到期資料。具體操作,請參見資料版本和生命週期。