使用 CreateTable 接口创建数据表时,需要指定数据表的结构信息和配置信息,高性能型实例中的数据表还可以根据需要设置预留读/写吞吐量。创建数据表时支持创建一个或者多个索引。
注意事项
前提条件
已通过控制台创建实例。具体操作,请参见创建实例。
已初始化 Client。具体操作,请参见初始化 OTSClient。
接口
/**
* CreateTableRequest包含创建一张新的表所必需的一些参数,包括表的Meta、预留读写吞吐量、表的配置、表的服务端加密配置、是否启用本地事务等。
*/
public class CreateTableRequest implements Request {
/** 表的结构信息。*/
private TableMeta tableMeta;
/** 索引信息。*/
private List<IndexMeta> indexMeta;
/** 表的预留吞吐量设置。*/
private ReservedThroughput reservedThroughput;
/** 表的配置项, 包括TTL和最大版本数等。*/
private TableOptions tableOptions;
/** 表的Stream配置,一般无需配置。*/
private OptionalValue<StreamSpecification> streamSpecification;
/** 表的服务器端加密配置。*/
private OptionalValue<SSESpecification> sseSpecification;
/** 是否启用局部事务。*/
private OptionalValue<Boolean> enableLocalTxn;
}
参数
请结合下表参数说明和创建数据表 API CreateTable 中的消息结构介绍进行代码中的参数配置。
参数 | 是否必选 | 说明 |
tableMeta | 是 | 数据表的结构信息,包括如下内容: 说明 属性列不需要定义。表格存储每行的数据列都可以不同,属性列的列名在写入时指定。
|
indexMetas | 否 | 索引表的结构信息,每个 indexMeta 都包括如下内容:
|
tableOptions | 否 | 数据表的配置信息。更多信息,请参见数据版本和生命周期。 配置信息包括如下内容:
如果希望修改表的数据生命周期、最大版本数等配置信息,请通过调用 UpdateTable 接口实现。具体操作,请参见更新表配置。 |
reservedThroughtput | 否 | 为数据表配置预留读吞吐量或预留写吞吐量,可选配置。 重要 仅高性能型实例中的数据表支持此功能;其他规格实例中的数据表的预留读/写吞吐量只能设置为 0,不允许预留。 默认值为 0,即完全按量计费。 单位为 CU。
|
sseSpecification | 否 | 数据表的加密配置。更多信息,请参见创建加密表。 |
enableLocalTxn | 否 | 是否开启局部事务功能。类型为 Boolean。默认值为 false,表示不开启局部事务。 如果要在创建数据表时开启局部事务,请将此参数设置为 true。 重要
|
示例
创建数据表时不带索引
以下示例用于创建数据表。该表的主键为 pk(String 类型),属性列值最多保留 3 个版本数据以及数据永不过期。
private static void createTable(SyncClient client) {
//设置数据表名称。
TableMeta tableMeta = new TableMeta("<TABLE_NAME>");
//为数据表添加主键列。
tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema("pk", PrimaryKeyType.STRING));
//数据的过期时间,单位为秒,-1表示永不过期。带索引表的数据表数据生命周期必须设置为-1。
int timeToLive = -1;
//保存的最大版本数,1表示每列上最多保存一个版本即保存最新的版本。带索引表的数据表最大版本数必须设置为1。
int maxVersions = 3;
TableOptions tableOptions = new TableOptions(timeToLive, maxVersions);
CreateTableRequest request = new CreateTableRequest(tableMeta, tableOptions);
request.setReservedThroughput(new ReservedThroughput(new CapacityUnit(0, 0))); //设置预留读写吞吐量,容量型实例中的数据表只能设置为0,高性能型实例中的数据表可以设置为非零值。
client.createTable(request);
}
创建数据表时配置全局二级索引
以下示例用于同时创建数据表和全局二级索引。该表包含 pk1(String 类型)和 pk2(Integer 类型)两列主键且包含 defcol1(String 类型)和 defcol2(Integer 类型)两个预定义列,属性列值只保留最新版本数据以及数据永不过期。该全局二级索引的主键列为 defcol1、pk1 和 pk2,属性列为 defcol2。
private static void createTable(SyncClient client) {
//设置数据表名称。
TableMeta tableMeta = new TableMeta("<TABLE_NAME>");
//为数据表添加主键列。
tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema("pk1", PrimaryKeyType.STRING));
tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema("pk2", PrimaryKeyType.INTEGER));
//为数据表添加预定义列。
tableMeta.addDefinedColumn(new DefinedColumnSchema("defcol1", DefinedColumnType.STRING));
tableMeta.addDefinedColumn(new DefinedColumnSchema("defcol2", DefinedColumnType.INTEGER));
//数据的过期时间,单位为秒,-1表示永不过期。带索引表的数据表数据生命周期必须设置为-1。
int timeToLive = -1;
//保存的最大版本数,1表示每列上最多保存一个版本即保存最新的版本。带索引表的数据表最大版本数必须设置为1。
int maxVersions = 1;
TableOptions tableOptions = new TableOptions(timeToLive, maxVersions);
ArrayList<IndexMeta> indexMetas = new ArrayList<IndexMeta>();
//设置索引表名称。
IndexMeta indexMeta = new IndexMeta("<INDEX_NAME>");
//为索引表添加主键列。
indexMeta.addPrimaryKeyColumn("defcol1");
//为索引表添加属性列。
indexMeta.addDefinedColumn("defcol2");
indexMetas.add(indexMeta);
CreateTableRequest request = new CreateTableRequest(tableMeta, tableOptions, indexMetas); //创建数据表的同时创建索引表。
client.createTable(request);
}
创建数据表时配置本地二级索引
以下示例用于同时创建数据表和本地二级索引。该表的主键为 pk1(String 类型)和 pk2(Integer 类型)且包括 defcol1(String 类型)和 defcol2(Integer 类型)两个预定义列,属性列值只保留最新版本数据以及数据永不过期。该本地二级索引的主键列为 pk1、defcol1 和 pk2,属性列为 defcol2。
private static void createTable(SyncClient client) {
//设置数据表名称。
TableMeta tableMeta = new TableMeta("<TABLE_NAME>");
//为数据表添加主键列。
tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema("pk1", PrimaryKeyType.STRING));
tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema("pk2", PrimaryKeyType.INTEGER));
//为数据表添加预定义列。
tableMeta.addDefinedColumn(new DefinedColumnSchema("defcol1", DefinedColumnType.STRING));
tableMeta.addDefinedColumn(new DefinedColumnSchema("defcol2", DefinedColumnType.INTEGER));
//数据的过期时间,单位为秒,-1表示永不过期。带索引表的数据表数据生命周期必须设置为-1。
int timeToLive = -1;
//保存的最大版本数,1表示每列上最多保存一个版本即保存最新的版本。带索引表的数据表最大版本数必须设置为1。
int maxVersions = 1;
TableOptions tableOptions = new TableOptions(timeToLive, maxVersions);
ArrayList<IndexMeta> indexMetas = new ArrayList<IndexMeta>();
//设置索引表名称。
IndexMeta indexMeta = new IndexMeta("<INDEX_NAME>");
//设置索引类型为本地二级索引(IT_LOCAL_INDEX)。
indexMeta.setIndexType(IT_LOCAL_INDEX);
//设置索引更新模式为同步更新(IUM_SYNC_INDEX)。当索引类型为本地二级索引时,索引更新模式必须为同步更新。
indexMeta.setIndexUpdateMode(IUM_SYNC_INDEX);
//为索引表添加主键列。索引表的第一列主键必须与数据表的第一列主键相同。
indexMeta.addPrimaryKeyColumn("pk1");
//为索引表添加主键列。
indexMeta.addPrimaryKeyColumn("defcol1");
//为索引表添加属性列。
indexMeta.addDefinedColumn("defcol2");
indexMetas.add(indexMeta);
CreateTableRequest request = new CreateTableRequest(tableMeta, tableOptions, indexMetas); //创建数据表的同时创建索引表。
client.createTable(request);
}
创建表时开启局部事务
以下示例用于创建数据表时开启局部事务功能。该表的主键为 pk1(String 类型)和 pk2(Integer 类型),属性列值只保留最新版本数据以及数据永不过期。
private static void createTable(SyncClient client) {
//设置数据表名称。
TableMeta tableMeta = new TableMeta("<TABLE_NAME>");
//为数据表添加主键列。
tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema("pk1", PrimaryKeyType.STRING));
tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema("pk2", PrimaryKeyType.INTEGER));
//数据的过期时间,单位为秒,-1表示永不过期。带索引表的数据表数据生命周期必须设置为-1。
int timeToLive = -1;
//保存的最大版本数,1表示每列上最多保存一个版本即保存最新的版本。带索引表的数据表最大版本数必须设置为1。
int maxVersions = 1;
TableOptions tableOptions = new TableOptions(timeToLive, maxVersions);
CreateTableRequest request = new CreateTableRequest(tableMeta, tableOptions);
//开启局部事务。当为数据表配置了主键自增列时,此配置无效。
request.setLocalTxnEnabled(true);
client.createTable(request);
}