本文将通过参数说明和示例代码为您介绍如何使用 Go SDK 创建数据表。在创建数据表时,您需要指定数据表的结构信息和配置信息。CU 模式(原按量模式)下高性能型实例中的数据表还可以根据需要设置预留读写吞吐量。
注意事项
前提条件
已通过控制台创建实例。具体操作,请参见创建实例。
已初始化 OTSClient。具体操作,请参见初始化 OTSClient。
接口
//说明:根据指定表结构信息创建数据表。
//当创建一个数据表后,通常需要等待几秒钟时间使partition load完成,才能进行各种操作。
//返回:CreateTableResponse
CreateTable(request *CreateTableRequest) (*CreateTableResponse, error)
参数说明
request
包含以下参数:
参数 | 说明 |
TableMeta(必选) | 数据表的结构信息,包括如下内容:
|
TableOption(必选) | 数据表的配置信息,包括如下内容:
|
IndexMetas(可选) | 索引列表。每个索引包含以下内容:
|
ReservedThroughput(必选) | 预留读写吞吐量,单位为 CU。默认值为 0。 重要 仅 CU 模式下高性能型实例支持设置数据表的预留读写吞吐量为非零值。 |
StreamSpec(可选) | 数据表的 Stream 配置信息,包括如下内容:
|
SSESpecification(可选) | 数据表的加密配置。 重要 数据表创建后,不支持修改加密相关配置。 |
EnableLocalTxn(可选) | 是否开启局部事务功能。默认值为 false,表示不开启局部事务功能。 重要
|
示例
创建数据表
以下示例用于创建数据表。
func CreateTableSample(client *tablestore.TableStoreClient, tableName string) {
createTableRequest := new(tablestore.CreateTableRequest)
tableMeta := new(tablestore.TableMeta)
//设置数据表名称。
tableMeta.TableName = tableName
//为数据表添加主键列。主键为pk1(String类型)和pk2(Integer类型),其中pk1主键列为分区键,pk2主键列为自增列。
tableMeta.AddPrimaryKeyColumn("pk1", tablestore.PrimaryKeyType_STRING)
tableMeta.AddPrimaryKeyColumnOption("pk2", tablestore.PrimaryKeyType_INTEGER, tablestore.AUTO_INCREMENT)
tableOption := new(tablestore.TableOption)
//数据的过期时间,-1表示永不过期。
tableOption.TimeToAlive = -1
//最大版本数,属性列值最多保留1个版本,即保存最新的版本。
tableOption.MaxVersion = 1
//有效版本偏差,即写入数据的时间戳与系统当前时间的偏差允许最大值为86400秒(1天)。
tableOption.DeviationCellVersionInSec = 86400
//设置预留读写吞吐量,容量型实例下的数据表只能设置为0,高性能型实例下的数据表可以设置为非零值。
reservedThroughput := new(tablestore.ReservedThroughput)
reservedThroughput.Readcap = 0
reservedThroughput.Writecap = 0
createTableRequest.TableMeta = tableMeta
createTableRequest.TableOption = tableOption
createTableRequest.ReservedThroughput = reservedThroughput
_, err := client.CreateTable(createTableRequest)
if err != nil {
fmt.Println("Failed to create table with error:", err)
} else {
fmt.Println("Create table finished")
}
}
创建数据表时配置二级索引
创建数据表时配置全局二级索引
以下示例用于同时创建数据表和全局二级索引。
func CreateTableWithGlobalIndexSample(client *tablestore.TableStoreClient, tableName string) {
createTableRequest := new(tablestore.CreateTableRequest)
tableMeta := new(tablestore.TableMeta)
//设置数据表名称。
tableMeta.TableName = tableName
//为数据表添加主键列。主键为pk1(String类型)和pk2(Integer类型)。
tableMeta.AddPrimaryKeyColumn("pk1", tablestore.PrimaryKeyType_STRING)
tableMeta.AddPrimaryKeyColumn("pk2", tablestore.PrimaryKeyType_INTEGER)
//为数据表添加预定义列。预定义列为defcol1(String类型)和defcol2(Integer类型)。
tableMeta.AddDefinedColumn("defcol1", tablestore.DefinedColumn_STRING)
tableMeta.AddDefinedColumn("defcol2", tablestore.DefinedColumn_INTEGER)
tableOption := new(tablestore.TableOption)
//数据永不过期,-1表示永不过期。
tableOption.TimeToAlive = -1
//最大版本数,属性列值最多保留1个版本,即保存最新的版本。。
tableOption.MaxVersion = 1
reservedThroughput := new(tablestore.ReservedThroughput)
//全局二级索引
indexMeta := new(tablestore.IndexMeta)
//设置索引名称。
indexMeta.IndexName = "<INDEX_NAME>"
//为索引添加主键列。主键列为defcol1、pk1和pk2
indexMeta.AddPrimaryKeyColumn("defcol1")
indexMeta.AddPrimaryKeyColumn("pk1")
indexMeta.AddPrimaryKeyColumn("pk2")
//为索引添加预定义列。预定义列为defcol2。
indexMeta.AddDefinedColumn("defcol2")
createTableRequest.TableMeta = tableMeta
createTableRequest.TableOption = tableOption
createTableRequest.ReservedThroughput = reservedThroughput
createTableRequest.AddIndexMeta(indexMeta)
_, err := client.CreateTable(createTableRequest)
if err != nil {
fmt.Println("Failed to create table with error:", err)
} else {
fmt.Println("Create table finished")
}
}
创建数据表时配置本地二级索引
以下示例用于同时创建数据表和本地二级索引。
func CreateTableWithLocalIndexSample(client *tablestore.TableStoreClient, tableName string) {
createTableRequest := new(tablestore.CreateTableRequest)
tableMeta := new(tablestore.TableMeta)
//设置数据表名称。
tableMeta.TableName = tableName
//为数据表添加主键列。主键为pk1(String类型)和pk2(Integer类型)。
tableMeta.AddPrimaryKeyColumn("pk1", tablestore.PrimaryKeyType_STRING)
tableMeta.AddPrimaryKeyColumn("pk2", tablestore.PrimaryKeyType_INTEGER)
//为数据表添加预定义列。预定义列为defcol1(String类型)和defcol2(Integer类型)。
tableMeta.AddDefinedColumn("defcol1", tablestore.DefinedColumn_STRING)
tableMeta.AddDefinedColumn("defcol2", tablestore.DefinedColumn_INTEGER)
tableOption := new(tablestore.TableOption)
//数据永不过期,-1表示永不过期。
tableOption.TimeToAlive = -1
//最大版本数,属性列值最多保留1个版本,即保存最新的版本。
tableOption.MaxVersion = 1
reservedThroughput := new(tablestore.ReservedThroughput)
//本地二级索引
indexMeta := new(tablestore.IndexMeta)
//设置索引名称。
indexMeta.IndexName = "<INDEX_NAME>"
//设置索引类型为本地二级索引(IT_LOCAL_INDEX)。
indexMeta.IndexType = tablestore.IT_LOCAL_INDEX
//为索引添加主键列。主键列为pk1、defcol1和pk2。
indexMeta.AddPrimaryKeyColumn("pk1")
indexMeta.AddPrimaryKeyColumn("defcol1")
indexMeta.AddPrimaryKeyColumn("pk2")
//为索引添加预定义列。预定义列为defcol2。
indexMeta.AddDefinedColumn("defcol2")
createTableRequest.TableMeta = tableMeta
createTableRequest.TableOption = tableOption
createTableRequest.ReservedThroughput = reservedThroughput
createTableRequest.AddIndexMeta(indexMeta)
_, err := client.CreateTable(createTableRequest)
if err != nil {
fmt.Println("Failed to create table with error:", err)
} else {
fmt.Println("Create table finished")
}
}
创建数据表时开启局部事务
以下示例用于创建数据表时开启局部事务功能。
func CreateTableWithEnableLocalTxnSample(client *tablestore.TableStoreClient, tableName string) {
createTableRequest := new(tablestore.CreateTableRequest)
tableMeta := new(tablestore.TableMeta)
//设置数据表名称。
tableMeta.TableName = tableName
//为数据表添加主键列。主键为pk1(String类型)和pk2(Integer类型)。
tableMeta.AddPrimaryKeyColumn("pk1", tablestore.PrimaryKeyType_STRING)
tableMeta.AddPrimaryKeyColumn("pk2", tablestore.PrimaryKeyType_INTEGER)
tableOption := new(tablestore.TableOption)
//数据的过期时间,-1表示永不过期。
tableOption.TimeToAlive = -1
//最大版本数,属性列值最多保留1个版本,即保存最新的版本。
tableOption.MaxVersion = 1
reservedThroughput := new(tablestore.ReservedThroughput)
//开启局部事务。如果数据表配置了主键自增列,则开启局部事务配置不会生效。
enableLocalTxn := proto.Bool(true)
createTableRequest.TableMeta = tableMeta
createTableRequest.TableOption = tableOption
createTableRequest.ReservedThroughput = reservedThroughput
createTableRequest.EnableLocalTxn = enableLocalTxn
_, err := client.CreateTable(createTableRequest)
if err != nil {
fmt.Println("Failed to create table with error:", err)
} else {
fmt.Println("Create table finished")
}
}