准备工作
在您开始Tablestore SDK开发前,需确保已开通表格存储服务并且已创建表格存储实例。
您需要提前获取到以下几个参数
开发简介
开发示例中将以订单场景为例,使用Tablestore SDK实现如下几个功能。
- 订单表创建。
- 订单插入。
- 订单号查询。
- 订单搜索。
字段名 |
字段类型 |
字段描述 |
|
order_id |
String |
主键 |
订单号 |
customer_name |
String |
属性列 |
消费者姓名 |
product_name |
String |
属性列 |
产品名 |
product_type |
String |
属性列 |
产品类型 |
order_time |
String |
属性列 |
下单时间 |
pay_time |
String |
属性列 |
支付时间 |
订单表
开发步骤
初始化连接
Tablestore支持Http/Https协议访问服务端,使用Python SDK发起请求前,您需要初始化一个OTSClinet实例,初始化需要获取到服务地址(endpoint)、实例名(instanceName)、密钥(accessKeyId、accessSecret)等信息。代码如下
if__name__=='__main__': client=OTSClient("https://order-instance.cn-beijing.ots.aliyuncs.com",# your endpoint"",# your accessKeyId"",# your accessSecret"order-instance")#your insntace name#operation_method(client)
创建数据表
示例代码中创建了一张订单数据表order。
# 创建数据表defcreateOrderTable(client): schema_of_primary_key= [('order_id', 'STRING')] table_meta=TableMeta("order", schema_of_primary_key) # 设置表数据生命周期为永久,设置表最大版本数为1table_option=TableOptions(-1, 1) # 默认设置表预留读写cu为0reserved_throughput=ReservedThroughput(CapacityUnit(0, 0)) # 发送创建数据表请求client.create_table(table_meta, table_option, reserved_throughput) print ('Table has been created.')
写入数据
示例代码中写入了一条订单数据,订单号order_id为“o1”。样例中模拟了一万条订单数据,这里不作展示。
defputOrder(client): primary_key= [('order_id', 'o1')] attribute_columns= [('customer_name', '消十一'),('product_name', 'iphone 6'),('product_type', '手机'),('order_time', '2021-10-25 09:20:01'),('pay_time', '2017-10-25 10:00:01')] table_name='order'row=Row(primary_key, attribute_columns) condition=Condition(RowExistenceExpectation.IGNORE) consumed, return_row=client.put_row(table_name, row, condition) print (u'Write succeed, consume %s write cu.'%consumed.write)
查询数据
示例代码中查询订单号order_id为“o1”的记录
defgetOrder(client): primary_key= [('order_id', 'o1')] columns_to_get= ['customer_name','product_name','product_type','order_time','pay_time'] table_name="order"consumed, return_row, next_token=client.get_row(table_name, primary_key, columns_to_get, None, 1) print ('Value of primary key: %s'%return_row.primary_key) print ('Value of attribute: %s'%return_row.attribute_columns)
创建多元索引
示例代码中创建了一个多元索引order_index。分别设置customer_name字符串类型、order_time字符串类型、pay_time字符串类型、product_name分词类型、product_type字符串类型。关于索引字段类型的介绍请参考多元索引概述。
defcreateSearchIndex(client): field_a=FieldSchema('customer_name', FieldType.KEYWORD, index=True, enable_sort_and_agg=True, store=True) field_b=FieldSchema('order_time', FieldType.KEYWORD, index=True, enable_sort_and_agg=True, store=True) field_c=FieldSchema('pay_time', FieldType.KEYWORD, index=True, enable_sort_and_agg=True, store=True) field_d=FieldSchema('product_type', FieldType.TEXT, index=True, store=True, analyzer=AnalyzerType.SINGLEWORD) field_e=FieldSchema('customer_name', FieldType.KEYWORD, index=True, enable_sort_and_agg=True, store=True) fields= [field_a, field_b, field_c, field_d, field_e] index_meta=SearchIndexMeta(fields, None, None) client.create_search_index("order", "order_index", index_meta) print ('create search index succeed')
搜索数据
示例代码中查询产品类型为“手机”的订单,并统计了符合条件的行数。
defsearchQuery1(): query=TermQuery('product_type', '手机') search_response=client.search( "order", "order_index", SearchQuery(query, limit=100, get_total_count=True), ColumnsToGet(return_type=ColumnReturnType.ALL) )
示例代码中搜索产品名包含“iphone”的订单,并统计了符合条件的行数。
defsearchQuery2(): query=MatchQuery('product_name', 'iphone') search_response=client.search( "order", "order_index", SearchQuery(query, limit=100, get_total_count=True), ColumnsToGet(return_type=ColumnReturnType.ALL) )
示例代码中查询了消费者姓名为“消十一”并且下单时间在“2021-10-24 00:00:00”之间的订单。并统计了行数。
defsearchQuery3(): bool_query=BoolQuery( must_queries=[ TermQuery('customer_name', '消十一'), RangeQuery('order_time', range_to='2021-10-24 00:00:00', include_upper=False) ] ) search_response=client.search( "order", "order_index", SearchQuery( bool_query, None, limit=10, get_total_count=True), ColumnsToGet(return_type=ColumnReturnType.ALL) )
删除多元索引
示例代码中展示了删除订单表order中的order_index多元索引。
defdelete_search_index(index_name): client.delete_search_index("order", "order_index")
删除数据表
示例代码中展示了删除订单表order。删除表之前需确保先删除表中的多元索引。
defdelete_table(): client.delete_table("order")
更多关于Tablestore Python SDK的介绍请参考Tablestore Python SDK。