准备工作
在您开始Tablestore SDK开发前,需确保已开通表格存储服务并且已创建表格存储实例。
您需要提前获取到以下几个参数
开发简介
开发示例中将以订单场景为例,使用Tablestore SDK实现如下几个功能。
- 订单表创建。
- 订单插入。
- 订单号查询。
- 订单搜索。
字段名 | 字段类型 | 字段描述 | |
order_id | String | 主键 | 订单号 |
customer_name | 属性列 | 消费者姓名 | |
product_name | 产品名 | ||
product_type | 产品类型 | ||
order_time | 下单时间 | ||
pay_time | 支付时间 |
订单表
开发步骤
初始化连接
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