准备工作
在您开始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协议访问服务端,使用Node.js SDK发起请求前,您需要初始化一个OTSClinet实例,初始化需要获取到服务地址(endpoint)、实例名(instanceName)、密钥(accessKeyId、accessSecret)等信息。代码如下
var client = new TableStore.Client({
accessKeyId: '',
accessKeySecret: '',
endpoint: '"https://order-instance.cn-beijing.ots.aliyuncs.com"',
instancename: 'order-instance',
maxRetries:20,//默认20次重试,可以省略此参数。
});
创建数据表
示例代码中创建了一张订单数据表order。
var client = require('./client'); var params = { tableMeta: { tableName: 'order', primaryKey: [ { name: 'order_id', type: 'STRING' } ] }, reservedThroughput: { capacityUnit: { read: 0, write: 0 } }, tableOptions: { timeToLive: -1, //数据的过期时间,单位为秒,-1代表永不过期。如果设置过期时间为一年,即为365*24*3600。 maxVersions: 1 //保存的最大版本数,设置为1代表每列上最多保存一个版本(保存最新的版本)。 } }; client.createTable(params, function (err, data) { if (err) { console.log('error:', err); return; } console.log('success:', data); });
写入数据
示例代码中写入了一条订单数据,订单号order_id为“o1”。样例中模拟了一万条订单数据,这里不作展示。
var TableStore = require('../index.js'); var client = require('./client'); var params = { tableName: "order", condition: new TableStore.Condition(TableStore.RowExistenceExpectation.IGNORE, null), primaryKey: [{ 'order_id': 'o1' }], attributeColumns: [ { 'customer_name': '消十一' }, { 'product_name': 'iphone 6'}, { 'product_type': '手机' }, { 'order_time': '2021-10-25 09:20:01' }, { 'pay_time': '2017-10-25 10:00:01') } ], returnContent: { returnType: TableStore.ReturnType.Primarykey } }; client.putRow(params, function (err, data) { if (err) { console.log('error:', err); return; } console.log('success:', data); });
查询数据
示例代码中查询订单号order_id为“o1”的记录
var TableStore = require('../index.js'); var client = require('./client'); var params = { tableName: "order", primaryKey: [{ 'order_id': 'o1' }], maxVersions: 1 //最多可读取的版本数,设置为1即代表最多可读取1个版本。 }; client.getRow(params, function (err, data) { if (err) { console.log('error:', err); return; } console.log('success:', data); });
创建多元索引
示例代码中创建了一个多元索引order_index。分别设置customer_name字符串类型、order_time字符串类型、pay_time字符串类型、product_name分词类型、product_type字符串类型。关于索引字段类型的介绍请参考多元索引概述。
var client = require('./client'); var TableStore = require('../../index.js'); client.createSearchIndex({ tableName: 'order', //设置数据表名称。 indexName: 'order_index', //设置多元索引名称。 schema: { fieldSchemas: [ { fieldName: "customer_name", fieldType: TableStore.FieldType.KEYWORD, //设置字段名和字段类型。 index: true, //设置开启索引。 enableSortAndAgg: true, //设置开启排序与统计聚合功能。 store: false, isAnArray: false }, { fieldName: "order_time", fieldType: TableStore.FieldType.KEYWORD, index: true, enableSortAndAgg: true, store: true, isAnArray: false }, { fieldName: "pay_time", fieldType: TableStore.FieldType.KEYWORD, index: true, enableSortAndAgg: true, store: true, isAnArray: false }, { fieldName: "product_name", fieldType: TableStore.FieldType.TEXT, index: true, enableSortAndAgg: false, store: true, isAnArray: false, analyzer: "single_word" }, { fieldName: "pay_time", fieldType: TableStore.FieldType.KEYWORD, index: true, enableSortAndAgg: true, store: true, isAnArray: false } ] } }, function (err, data) { if (err) { console.log('error:', err); return; } console.log('success:', data); });
搜索数据
示例代码中查询产品类型为“手机”的订单,并统计了符合条件的行数。
var client = require('./client'); var TableStore = require('../../index.js'); client.search({ tableName: 'order', indexName: 'order_index', searchQuery: { offset: 0, limit: 10, query: { queryType: TableStore.QueryType.TERM_QUERY, query: { fieldName: "product_type", term: "手机" } }, getTotalCount: true //结果中的TotalCount可以表示表中数据的总行数,默认为false,表示不返回。 }, columnToGet: { //返回列设置RETURN_SPECIFIED(自定义)、RETURN_ALL(所有列)和RETURN_NONE(不返回)。 returnType: TableStore.ColumnReturnType.RETURN_ALL } }, function (err, data) { if (err) { console.log('error:', err); return; } console.log('success:', JSON.stringify(data, null, 2)); });
示例代码中搜索产品名包含“iphone”的订单,并统计了符合条件的行数。
var client = require('./client'); var TableStore = require('../../index.js'); client.search({ tableName: 'order', indexName: 'order_index', searchQuery: { offset: 0, limit: 10, query: { //设置查询类型为MatchQuery。 queryType: TableStore.QueryType.MATCH_QUERY, query: { fieldName: "product_name", //设置要匹配的列。 text: "iphone" //设置要匹配的值。 } }, getTotalCount: true //结果中的TotalCount可以表示表中数据的总行数,默认为false,表示不返回。 }, columnToGet: { //返回列设置RETURN_SPECIFIED(自定义)、RETURN_ALL(所有列)和RETURN_NONE(不返回)。 returnType: TableStore.ColumnReturnType.RETURN_ALL } }, function (err, data) { if (err) { console.log('error:', err); return; } console.log('success:', JSON.stringify(data, null, 2)); });
示例代码中查询了消费者姓名为“消十一”并且下单时间在“2021-10-24 00:00:00”之间的订单。并统计了行数。
var client = require('../client'); var TableStore = require('../../index.js'); client.search({ tableName: "order", indexName: "order_index", searchQuery: { offset: 0, limit: 10, getTotalCount: false, //结果中的TotalCount可以表示表中数据的总行数,默认为false,表示不返回。 query: { //构造boolQuery4,设置查询条件为至少满足boolQuery1和boolQuery3中的一个条件。 queryType: TableStore.QueryType.BOOL_QUERY, query: { mustQueries: [ { queryType:TableStore.QueryType.TERM_QUERY, query: { fieldName : "customer_name", term: "消十一" } }, { queryType: TableStore.QueryType.RANGE_QUERY, query: { fieldName: "order_time", rangeTo: '2021-10-24 00:00:00', includeUpper: false } } ] } }, }, columnToGet: { //返回列设置RETURN_SPECIFIED(自定义)、RETURN_ALL(所有列)和RETURN_NONE(不返回)。 returnType: TableStore.ColumnReturnType.RETURN_ALL } }, function (err, data) { if (err) { console.log('error:', err); return; } console.log('success:', JSON.stringify(data, null, 2)); });
删除多元索引
示例代码中展示了删除订单表order中的order_index多元索引。
var client = require('./client'); client.deleteSearchIndex({ tableName: 'order', //设置数据表名称。 indexName: 'order_index' //设置多元索引名称。 }, function (err, data) { if (err) { console.log('error:', err); return; } console.log('success:', data); });
删除数据表
示例代码中展示了删除订单表order。删除表之前需确保先删除表中的多元索引。
var client = require('./client'); var params = { tableName: 'order' }; client.deleteTable(params, function (err, data) { if (err) { console.log('error:', err); return; } console.log('success:', data); });
更多关于Tablestore Node.js SDK的介绍请参考Tablestore Node.js SDK。