本文將通過參數說明和示例代碼為您介紹如何使用 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);
});