Go SDK 可创建宽表模型数据表,并配置表结构、表属性、Stream、局部事务、二级索引和数据加密等功能。
前提条件
安装Tablestore Go SDK并初始化客户端。
功能说明
调用 CreateTable 创建数据表。创建时必须指定表结构、表配置和预留读写吞吐量,也可同时配置二级索引、Stream、局部事务和数据加密。
func (tableStoreClient *TableStoreClient) CreateTable(request *CreateTableRequest) (*CreateTableResponse, error)
创建数据表后,等待数据表加载完成再进行数据操作。加载过程通常需要几秒钟。
以下示例创建主键为 user_id 和 record_id 的 example_table 数据表。
tableMeta := &tablestore.TableMeta{TableName: "example_table"}
tableMeta.AddPrimaryKeyColumn("user_id", tablestore.PrimaryKeyType_STRING)
tableMeta.AddPrimaryKeyColumn("record_id", tablestore.PrimaryKeyType_INTEGER)
request := &tablestore.CreateTableRequest{
TableMeta: tableMeta,
TableOption: &tablestore.TableOption{
TimeToAlive: -1,
MaxVersion: 1,
DeviationCellVersionInSec: 86400,
},
ReservedThroughput: &tablestore.ReservedThroughput{},
}
_, err := client.CreateTable(request)
if err != nil {
log.Fatal(err)
}
参数说明
CreateTableRequest 包含以下参数。
|
名称 |
类型 |
说明 |
|
TableMeta(必选) |
|
表结构。 |
|
TableOption(必选) |
|
表配置。 |
|
ReservedThroughput(必选) |
|
预留读写吞吐量,单位为 CU。读写 CU 默认均为 |
|
IndexMetas(可选) |
|
随数据表创建的二级索引列表。 |
|
StreamSpec(可选) |
|
Stream 配置。 |
|
EnableLocalTxn(可选) |
|
是否开启局部事务。默认值为 |
|
SSESpecification(可选) |
|
数据加密配置。只能在创建数据表时开启和配置,创建后不能关闭或修改。 |
表结构
TableMeta 包含以下参数。
|
名称 |
类型 |
说明 |
|
TableName(必选) |
|
数据表名称。 |
|
SchemaEntry(必选) |
|
主键结构。数据表必须包含 1~4 个主键列,第一个主键列为分区键。 |
|
DefinedColumns(可选) |
|
预定义列列表。预定义列可用于创建二级索引。 |
主键列
TableMeta.SchemaEntry[] 的类型为 PrimaryKeySchema,包含以下参数。
|
名称 |
类型 |
说明 |
|
Name(必选) |
|
主键列名称。 |
|
Type(必选) |
|
主键列类型。支持 |
|
Option(可选) |
|
主键列配置。非分区的 INTEGER 主键列可设置为 |
预定义列
TableMeta.DefinedColumns[] 的类型为 DefinedColumnSchema,包含以下参数。
|
名称 |
类型 |
说明 |
|
Name(必选) |
|
预定义列名称。 |
|
ColumnType(必选) |
|
预定义列类型。支持 |
表配置
TableOption 包含以下参数。
|
名称 |
类型 |
说明 |
|
TimeToAlive(必选) |
|
数据生命周期,单位为秒。设置为 |
|
MaxVersion(必选) |
|
每个属性列最多保留的版本数。使用多元索引或二级索引时必须设置为 |
|
DeviationCellVersionInSec(可选) |
|
有效版本偏差,单位为秒,默认值为 |
|
AllowUpdate(可选) |
|
是否允许通过 |
|
UpdateFullRow(可选) |
|
是否启用整行更新。只能在创建数据表时设置,不能通过 |
预留读写吞吐量
ReservedThroughput 包含以下参数。
|
名称 |
类型 |
说明 |
|
Readcap(可选) |
|
预留读吞吐量,单位为 CU,默认值为 |
|
Writecap(可选) |
|
预留写吞吐量,单位为 CU,默认值为 |
二级索引
IndexMetas[] 的类型为 IndexMeta,包含以下参数。
|
名称 |
类型 |
说明 |
|
IndexName(必选) |
|
二级索引名称。 |
|
Primarykey(必选) |
|
索引主键列。可由数据表主键列和预定义列组成。本地二级索引的第一个主键列必须与数据表的第一个主键列相同。 |
|
DefinedColumns(可选) |
|
索引预定义列。 |
|
IndexType(可选) |
|
索引类型。 |
Stream 配置
StreamSpec 的类型为 StreamSpecification,包含以下参数。
|
名称 |
类型 |
说明 |
|
EnableStream(可选) |
|
是否开启 Stream,默认值为 |
|
ExpirationTime(可选) |
|
增量日志保留时长,单位为小时,最大值为 |
局部事务配置
EnableLocalTxn 设置为 true 时开启局部事务。使用时需注意以下事项:
Go SDK 1.7.8 及以上版本支持此参数。建议使用最新版本。
局部事务和主键列自增不能同时使用。如果配置了自增主键列,即使开启局部事务也不会生效。
如果创建数据表时未开启局部事务,后续需要使用该功能,请提交工单。
数据加密配置
SSESpecification 包含以下参数。
|
名称 |
类型 |
说明 |
|
Enable(可选) |
|
是否开启数据加密,默认值为 |
|
KeyType(可选) |
|
加密类型。 |
|
KeyId(可选) |
|
用户主密钥 ID。使用 BYOK 加密时必须设置。 |
|
RoleArn(可选) |
|
RAM 角色 ARN。使用 BYOK 加密时必须设置。 |
场景示例
创建启用 Stream 的数据表
以下示例创建数据表时开启 Stream,并将增量日志保留时长设置为 168 小时。
tableMeta := &tablestore.TableMeta{TableName: "stream_table"}
tableMeta.AddPrimaryKeyColumn("id", tablestore.PrimaryKeyType_STRING)
request := &tablestore.CreateTableRequest{
TableMeta: tableMeta,
TableOption: &tablestore.TableOption{TimeToAlive: -1, MaxVersion: 1},
ReservedThroughput: &tablestore.ReservedThroughput{},
StreamSpec: &tablestore.StreamSpecification{
EnableStream: true,
ExpirationTime: 168,
},
}
_, err := client.CreateTable(request)
if err != nil {
log.Fatal(err)
}
创建启用局部事务的数据表
以下示例创建数据表时开启局部事务。
tableMeta := &tablestore.TableMeta{TableName: "transaction_table"}
tableMeta.AddPrimaryKeyColumn("user_id", tablestore.PrimaryKeyType_STRING)
tableMeta.AddPrimaryKeyColumn("record_id", tablestore.PrimaryKeyType_INTEGER)
request := &tablestore.CreateTableRequest{
TableMeta: tableMeta,
TableOption: &tablestore.TableOption{TimeToAlive: -1, MaxVersion: 1},
ReservedThroughput: &tablestore.ReservedThroughput{},
EnableLocalTxn: proto.Bool(true),
}
_, err := client.CreateTable(request)
if err != nil {
log.Fatal(err)
}