表格存储提供了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. 在使用表格存储Python SDK 6.0.0版本时,执行删除单行数据的示例代码出现错误。
推荐您以下两种方式解决此问题。
升级表格存储Python 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()))
相关文档
如果要删除指定天数之前的数据,您可以通过为数据表配置数据生命周期的方式自动清理过期数据。具体操作,请参见数据版本和生命周期。