创建数据表

本文介绍如何通过Go SDK创建表格存储的数据表。

注意事项

创建数据表后,请等待数据表加载完成后再进行数据操作,否则数据操作会失败,这个过程通常需要几秒钟。

前提条件

初始化Tablestore Client

方法说明

func (tableStoreClient *TableStoreClient) CreateTable(request *CreateTableRequest) (*CreateTableResponse, error)

CreateTableRequest参数说明

  • TableMeta(必选)*TableMeta:表结构信息,包含以下参数。

    名称

    类型

    说明

    TableName(必选)

    string

    数据表名称。

    SchemaEntry(必选)

    []*PrimaryKeySchema

    主键信息。

    • 可以设置1~4个主键列,默认按升序进行排序,第一个主键列将作为分区键。

    • 主键数据类型包含STRING、INTEGERBINARY,非分区键中整型的主键列可以设置主键列自增

    DefinedColumns(可选)

    []*DefinedColumnSchema

    预定义列信息。

    • 预定义列是预先定义的属性列,可以用于创建二级索引多元索引

    • 预定义列数据类型包含STRING、INTEGER、BINARY、DOUBLEBOOLEAN。

  • TableOption(必选)*TableOption:表配置信息,包含以下参数。

    名称

    类型

    说明

    TimeToAlive(必选)

    int

    数据生命周期,单位为秒。

    • 设置为-1时表示数据永不过期,否则取值最低为86400(1天),超出生命周期的数据将会被自动清除。

    • 如果要使用多元索引或二级索引功能,必须将数据生命周期设置为-1,或者将AllowUpdate参数设置为false。

    MaxVersion(必选)

    int

    最大版本数。

    • 如果要使用多元索引或二级索引,最大版本数必须设置为1。

    DeviationCellVersionInSec(可选)

    int64

    有效版本偏差,单位为秒,默认值为86400(1天)。

    • 写入数据的时间戳与系统当前时间的差值必须在有效版本偏差范围内,否则写入数据将会失败。

    • 属性列数据的有效版本范围为[max(数据写入时间-有效版本偏差, 数据写入时间-数据生命周期), 数据写入时间+有效版本偏差)

    AllowUpdate(可选)

    *bool

    是否允许更新,默认值为true。

    • 设置为false时,无法通过UpdateRow()方法更新数据。

  • IndexMetas(可选)[]*IndexMeta:二级索引列表,每个索引包含以下参数。

    名称

    类型

    说明

    IndexName(必选)

    string

    索引名称。

    Primarykey(必选)

    []string

    索引的主键列。

    • 可以由数据表的主键列和预定义列组成。

    • 使用本地二级索引时,索引第一个主键列必须是数据表的第一个主键列。

    DefinedColumns(可选)

    []string

    索引的预定义列。

    • 由数据表的预定义列组成。

    IndexType(可选)

    IndexType

    索引类型,取值范围:

    • IT_GLOBAL_INDEX(默认值):全局二级索引。

    • IT_LOCAL_INDEX:本地二级索引。

  • StreamSpec(可选)*StreamSpecification:Stream配置信息,包含以下参数。

    名称

    类型

    说明

    EnableStream(可选)

    bool

    是否开启Stream,默认值为false。

    ExpirationTime(可选)

    int32

    Stream过期时间,表示增量日志过期时长。单位为小时,最大值为168(7天)。

    • EnableStream设置为true时,必须设置ExpirationTime。

  • EnableLocalTxn(可选)*bool:是否开启局部事务,默认值为false,表示不开启局部事务。

    • 仅 Go SDK 1.7.8 及以上版本支持此功能。

    • 局部事务功能和主键列自增无法同时使用,如果您配置了主键列自增,局部事务功能即使设置开启也不会生效。

    • 如果创建数据表时未开启局部事务功能,创建数据表后需要使用该功能,请加入钉钉群 23307953(表格存储技术交流群-3)进行咨询

  • SSESpecification(可选)*SSESpecification数据加密设置,包含以下参数。

    重要

    数据加密功能只支持在创建数据表时开启和配置,创建数据表后无法关闭加密功能。

    名称

    类型

    说明

    Enable(可选)

    bool

    是否开启数据加密功能,默认值为false。

    KeyType(可选)

    *SSEKeyType

    加密类型。SSEKeyType包含以下类型。

    • SSE_KMS_SERVICE:KMS加密。

    • SSE_BYOK:BYOK加密。

    KeyId(可选)

    *string

    用户主密钥ID。仅当keyTypeSSE_BYOK时需设置此参数。

    RoleArn(可选)

    *string

    RAM角色ARN。仅当keyTypeSSE_BYOK时需设置此参数。

  • ReservedThroughput(必选)*ReservedThroughput预留读写吞吐量,单位为CU,默认值为0。仅CU模式的高性能型实例可以设置为非零值且有效。

示例代码

以下示例代码创建了一张test_table表,该表包含1个 String类型的主键。

func CreateTableSample(client *tablestore.TableStoreClient) {
    // 构造数据表的结构信息
    tableMeta := new(tablestore.TableMeta)
    tableMeta.TableName = "test_table"
    // 创建数据表至少需要添加一个主键
    tableMeta.AddPrimaryKeyColumn("id", tablestore.PrimaryKeyType_STRING)

    // 构造数据表的配置信息
    tableOption := new(tablestore.TableOption)
    // 创建数据表时必须指定最大版本数
    tableOption.MaxVersion = 1
    // 创建数据表时必须指定数据生命周期,-1表示数据永不过期
    tableOption.TimeToAlive = -1

    // 创建数据表时必须设置预留读写吞吐量,默认值为0(仅CU模式高性能实例支持设置数据表的预留读写吞吐量为非零值)
    reservedThroughput := new(tablestore.ReservedThroughput)
    reservedThroughput.Readcap = 0
    reservedThroughput.Writecap = 0

    // 构造Request并发起请求
    createTableRequest := new(tablestore.CreateTableRequest)
    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.")
    }
}

您也可以在创建数据表的同时参考示例代码进行以下设置。

  • 添加预定义列

    tableMeta.AddDefinedColumn("name", tablestore.DefinedColumn_STRING)
  • 设置有效版本偏差

    tableOption.DeviationCellVersionInSec = 86400
  • 设置是否允许更新

    tableOption.AllowUpdate = proto.Bool(false)
  • 添加二级索引

    // 构造二级索引
    indexMeta := new(tablestore.IndexMeta)
    indexMeta.IndexName = "test_table_index"
    // 设置索引主键
    indexMeta.AddPrimaryKeyColumn("id")
    indexMeta.AddPrimaryKeyColumn("name")
    // 设置索引类型
    indexMeta.IndexType = tablestore.IT_LOCAL_INDEX
    // 添加二级索引
    createTableRequest.AddIndexMeta(indexMeta)
  • 设置Stream信息

    streamSpec := new(tablestore.StreamSpecification)
    streamSpec.EnableStream = true
    streamSpec.ExpirationTime = 168
    createTableRequest.StreamSpec = streamSpec
  • 设置是否开启局部事务

    enableLocalTxn := proto.Bool(true)
    createTableRequest.EnableLocalTxn = enableLocalTxn
  • 设置数据加密方式

    • KMS密钥加密

      sseSpec := new(tablestore.SSESpecification)
      sseSpec.SetEnable(true)
      sseSpec.SetKeyType(tablestore.SSE_KMS_SERVICE)
      createTableRequest.SSESpecification = sseSpec
    • BYOK加密

      说明

      运行代码前需要获取用户主密钥IDRAM角色ARN,具体操作请参见BYOK加密

      sseSpec := new(tablestore.SSESpecification)
      sseSpec.SetEnable(true)
      sseSpec.SetKeyType(tablestore.SSE_BYOK)
      sseSpec.SetKeyId("key-hzz65****************")
      sseSpec.SetRoleArn("acs:ram::1705************:role/tabletorebyok")
      createTableRequest.SSESpecification = sseSpec

相关文档