本文将通过参数说明和示例代码为您介绍如何使用 Node.js SDK 创建数据表。在创建数据表时,您需要指定数据表的结构信息和配置信息。CU 模式(原按量模式)下高性能型实例中的数据表还可以根据需要设置预留读写吞吐量。
注意事项
创建数据表后需要几秒钟进行加载,在此期间对该数据表的读写数据操作均会失败。请等待数据表加载完毕后再进行数据操作。
如果您有主键数据自增的需求,例如电商网站的商品 ID、论坛帖子的 ID 等场景,可以在创建数据时配置主键列自增。具体操作,请参见主键列自增。
前提条件
已通过控制台创建实例。具体操作,请参见创建实例。
已初始化 OTSClient。具体操作,请参见初始化 OTSClient。
接口
/**
* 说明:根据指定表结构信息创建数据表。
* 当创建一个数据表后,通常需要等待几秒钟时间使partition load完成,才能进行各种操作。
*/
createTable(params, callback)
参数说明
params
包含以下参数:
参数 | 说明 |
tableMeta(必选) | 数据表的结构信息,包括如下内容:
|
tableOptions(必选) | 数据表的配置信息,包括如下内容:
|
indexMetas(可选) | 索引列表。每个索引包含以下内容:
|
reservedThroughput(必选) | 预留读写吞吐量,单位为 CU。默认值为 0。 重要 仅 CU 模式下高性能型实例支持设置数据表的预留读写吞吐量为非零值。 |
streamSpecification(可选) | 数据表的 Stream 配置信息,包括如下内容:
|
示例
创建数据表
以下示例用于创建数据表。
var params = {
tableMeta: {
//设置数据表名称。
tableName: '<TABLE_NAME>',
//设置数据表主键列。主键为pk1(String类型)和pk2(Integer类型),其中pk1主键列为分区键,pk2主键列为自增列。
primaryKey: [
{
name: 'pk1',
type: 'STRING'
},
{
name: 'pk2',
type: 'INTEGER',
option: 'AUTO_INCREMENT'
}
]
},
tableOptions: {
//数据的过期时间,-1表示永不过期。
timeToLive: -1,
//最大版本数,属性列值最多保留1个版本,即保存最新的版本。
maxVersions: 1,
//有效版本偏差,即写入数据的时间戳与系统当前时间的偏差允许最大值为86400秒(1天)。
maxTimeDeviation: 86400
},
//设置预留读写吞吐量,容量型实例下的数据表只能设置为0,高性能型实例下的数据表可以设置为非零值。
reservedThroughput: {
capacityUnit: {
read: 0,
write: 0
}
}
};
client.createTable(params, function (err, data) {
if (err) {
console.log('error:', err);
return;
}
console.log('success:', data);
});
创建数据表时配置二级索引
创建数据表时配置全局二级索引
以下示例用于同时创建数据表和全局二级索引。
var params = {
tableMeta: {
//设置数据表名称。
tableName: '<TABLE_NAME>',
//设置数据表主键列。主键为pk1(String类型)和pk2(Integer类型)。
primaryKey: [
{
name: 'pk1',
type: 'STRING'
},
{
name: 'pk2',
type: 'INTEGER'
}
],
//设置数据表预定义列。预定义列为defcol1(String类型)和defcol2(Integer类型)。
definedColumn: [
{
name: 'defcol1',
type: TableStore.DefinedColumnType.DCT_STRING
},
{
name: 'defcol2',
type: TableStore.DefinedColumnType.DCT_INTEGER
}
],
},
tableOptions: {
//数据的过期时间,-1表示永不过期。
timeToLive: -1,
//最大版本数,属性列值最多保留1个版本,即保存最新的版本。
maxVersions: 1
},
//设置预留读写吞吐量,容量型实例下的数据表只能设置为0,高性能型实例下的数据表可以设置为非零值。
reservedThroughput: {
capacityUnit: {
read: 0,
write: 0
}
},
indexMetas: [
//索引类型默认为全局二级索引
{
//设置索引名称。
name: '<INDEX_NAME>',
//为索引添加主键。主键列为defcol1、pk1和pk2。
primaryKey: ['defcol1', 'pk1', 'pk2'],
//为索引添加预定义列。预定义列为defcol2。
definedColumn: ['defcol2']
}
]
};
client.createTable(params, function (err, data) {
if (err) {
console.log('error:', err);
return;
}
console.log('success:', data);
});
创建数据表时配置本地二级索引
以下示例用于同时创建数据表和本地二级索引。
var params = {
tableMeta: {
//设置数据表名称。
tableName: '<TABLE_NAME>',
//设置数据表主键列。主键为pk1(String类型)和pk2(Integer类型)。
primaryKey: [
{
name: 'pk1',
type: 'STRING'
},
{
name: 'pk2',
type: 'INTEGER'
}
],
//设置数据表预定义列。预定义列为defcol1(String类型)和defcol2(Integer类型)。
definedColumn: [
{
name: 'defcol1',
type: TableStore.DefinedColumnType.DCT_STRING
},
{
name: 'defcol2',
type: TableStore.DefinedColumnType.DCT_INTEGER
}
],
},
tableOptions: {
//数据的过期时间,-1表示永不过期。
timeToLive: -1,
//最大版本数,属性列值最多保留1个版本,即保存最新的版本。
maxVersions: 1,
},
//设置预留读写吞吐量,容量型实例下的数据表只能设置为0,高性能型实例下的数据表可以设置为非零值。
reservedThroughput: {
capacityUnit: {
read: 0,
write: 0
}
},
indexMetas: [
//本地二级索引
{
//设置索引名称。
name: '<INDEX_NAME>',
//为索引添加主键。主键列为pk1、defcol1和pk2。
primaryKey: ['pk1', 'defcol1', 'pk2'],
//为索引添加预定义列。预定义列为defcol2。
definedColumn: ['defcol2'],
//设置索引类型为本地二级索引(IT_LOCAL_INDEX)。
indexType: TableStore.IndexType.IT_LOCAL_INDEX,
//设置索引更新模式为同步更新(IUM_SYNC_INDEX)。当索引类型为本地二级索引时,索引更新模式必须为同步更新。
indexUpdateMode: TableStore.IndexUpdateMode.IUM_SYNC_INDEX
}
]
};
client.createTable(params, function (err, data) {
if (err) {
console.log('error:', err);
return;
}
console.log('success:', data);
});