本文介绍如何通过 Python SDK 范围读取表格存储中的数据。
前提条件
方法说明
def get_range(self, table_name, direction,
inclusive_start_primary_key,
exclusive_end_primary_key,
columns_to_get=None,
limit=None,
column_filter=None,
max_version=1,
time_range=None,
start_column=None,
end_column=None,
token=None,
transaction_id=None):示例代码
以下示例代码用于读取 test_table 表中主键值大于 row1 的数据。
try:
# 设置查询起始主键
inclusive_start_primary_key = [('id', 'row1')]
# 设置查询结束主键(返回结果不包含结束主键)
exclusive_end_primary_key = [('id', INF_MAX)]
# 调用 get_range 方法查询数据
consumed, next_start_primary_key, row_list, next_token = client.get_range('test_table', Direction.FORWARD,
inclusive_start_primary_key, exclusive_end_primary_key)
# 返回结果处理
print('* Read CU Cost: %s' % consumed.read)
print('* Write CU Cost: %s' % consumed.write)
print('* Rows Data:')
for row in row_list:
print(row.primary_key, row.attribute_columns)
except Exception as e:
print("Range get failed with error: %s" % e)单次范围扫描数据上限为 5000 行或者 4 MB,超出限制部分的数据将返回用于下一次读取的起始主键值,您可以参考以下代码进行迭代查询。
while True:
# 调用 get_range 方法查询数据
consumed, next_start_primary_key, row_list, next_token = client.get_range('test_table', Direction.FORWARD,
inclusive_start_primary_key,
exclusive_end_primary_key)
# 返回结果处理
print('* Read CU Cost: %s' % consumed.read)
print('* Write CU Cost: %s' % consumed.write)
print('* Rows Count: %s' % len(row_list))
print('* Rows Data:')
for row in row_list:
print(row.primary_key, row.attribute_columns)
# 设置下一次读取数据起始主键
if next_start_primary_key:
inclusive_start_primary_key = next_start_primary_key
else:
break您也可以在查询数据时参考示例代码进行以下设置。
设置读取的数据版本范围,结果只返回版本范围内的数据。
# 设置查询的数据版本范围为当前时间往前一天 time_range = (int(time.time() * 1000 - 86400 * 1000), int(time.time() * 1000)) consumed, next_start_primary_key, row_list, next_token = client.get_range('test_table', Direction.FORWARD, inclusive_start_primary_key, exclusive_end_primary_key, time_range= time_range)指定读取的属性列。
columns_to_get = ['col1'] # 调用 get_range 方法查询数据 consumed, next_start_primary_key, row_list, next_token = client.get_range('test_table', Direction.FORWARD, inclusive_start_primary_key, exclusive_end_primary_key, columns_to_get)设置单次返回最大行数。
limit = 10 # 调用 get_range 方法查询数据 consumed, next_start_primary_key, row_list, next_token = client.get_range('test_table', Direction.FORWARD, inclusive_start_primary_key, exclusive_end_primary_key, limit=limit)