全部产品
Search
文档中心

表格存储:创建数据表

更新时间:Aug 11, 2026

Go SDK 可创建宽表模型数据表,并配置表结构、表属性、Stream、局部事务、二级索引和数据加密等功能。

前提条件

安装Tablestore Go SDK并初始化客户端。

功能说明

调用 CreateTable 创建数据表。创建时必须指定表结构、表配置和预留读写吞吐量,也可同时配置二级索引、Stream、局部事务和数据加密。

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

创建数据表后,等待数据表加载完成再进行数据操作。加载过程通常需要几秒钟。

以下示例创建主键为 user_idrecord_idexample_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(必选)

*TableMeta

表结构。

TableOption(必选)

*TableOption

表配置。

ReservedThroughput(必选)

*ReservedThroughput

预留读写吞吐量,单位为 CU。读写 CU 默认均为 0。仅 CU 模式的高性能型实例支持设置非零值。

IndexMetas(可选)

[]*IndexMeta

随数据表创建的二级索引列表。

StreamSpec(可选)

*StreamSpecification

Stream 配置。

EnableLocalTxn(可选)

*bool

是否开启局部事务。默认值为 false

SSESpecification(可选)

*SSESpecification

数据加密配置。只能在创建数据表时开启和配置,创建后不能关闭或修改。

表结构

TableMeta 包含以下参数。

名称

类型

说明

TableName(必选)

string

数据表名称。

SchemaEntry(必选)

[]*PrimaryKeySchema

主键结构。数据表必须包含 1~4 个主键列,第一个主键列为分区键。

DefinedColumns(可选)

[]*DefinedColumnSchema

预定义列列表。预定义列可用于创建二级索引。

主键列

TableMeta.SchemaEntry[] 的类型为 PrimaryKeySchema,包含以下参数。

名称

类型

说明

Name(必选)

*string

主键列名称。

Type(必选)

*PrimaryKeyType

主键列类型。支持 PrimaryKeyType_STRINGPrimaryKeyType_INTEGERPrimaryKeyType_BINARY

Option(可选)

*PrimaryKeyOption

主键列配置。非分区的 INTEGER 主键列可设置为 AUTO_INCREMENT。更多信息,请参见主键列自增

预定义列

TableMeta.DefinedColumns[] 的类型为 DefinedColumnSchema,包含以下参数。

名称

类型

说明

Name(必选)

string

预定义列名称。

ColumnType(必选)

DefinedColumnType

预定义列类型。支持 STRINGINTEGERBINARYDOUBLEBOOLEAN

表配置

TableOption 包含以下参数。

名称

类型

说明

TimeToAlive(必选)

int

数据生命周期,单位为秒。设置为 -1 时数据永不过期;设置为其他值时,最小值为 86400(1 天)。使用多元索引或二级索引时,需设置为 -1,或将 AllowUpdate 设置为 false

MaxVersion(必选)

int

每个属性列最多保留的版本数。使用多元索引或二级索引时必须设置为 1

DeviationCellVersionInSec(可选)

int64

有效版本偏差,单位为秒,默认值为 86400(1 天)。写入数据的时间戳与系统当前时间的差值必须在有效版本偏差范围内。属性列数据的有效版本范围为 [max(数据写入时间-有效版本偏差, 数据写入时间-数据生命周期), 数据写入时间+有效版本偏差)

AllowUpdate(可选)

*bool

是否允许通过 UpdateRow 更新数据。默认值为 true

UpdateFullRow(可选)

*bool

是否启用整行更新。只能在创建数据表时设置,不能通过 UpdateTable 修改。

预留读写吞吐量

ReservedThroughput 包含以下参数。

名称

类型

说明

Readcap(可选)

int

预留读吞吐量,单位为 CU,默认值为 0

Writecap(可选)

int

预留写吞吐量,单位为 CU,默认值为 0

二级索引

IndexMetas[] 的类型为 IndexMeta,包含以下参数。

名称

类型

说明

IndexName(必选)

string

二级索引名称。

Primarykey(必选)

[]string

索引主键列。可由数据表主键列和预定义列组成。本地二级索引的第一个主键列必须与数据表的第一个主键列相同。

DefinedColumns(可选)

[]string

索引预定义列。

IndexType(可选)

IndexType

索引类型。IT_GLOBAL_INDEX 表示全局二级索引,IT_LOCAL_INDEX 表示本地二级索引。默认值为 IT_GLOBAL_INDEX

Stream 配置

StreamSpec 的类型为 StreamSpecification,包含以下参数。

名称

类型

说明

EnableStream(可选)

bool

是否开启 Stream,默认值为 false

ExpirationTime(可选)

int32

增量日志保留时长,单位为小时,最大值为 168(7 天)。EnableStream 设置为 true 时必须设置。

局部事务配置

EnableLocalTxn 设置为 true 时开启局部事务。使用时需注意以下事项:

  • Go SDK 1.7.8 及以上版本支持此参数。建议使用最新版本。

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

  • 如果创建数据表时未开启局部事务,后续需要使用该功能,请提交工单

数据加密配置

SSESpecification 包含以下参数。

名称

类型

说明

Enable(可选)

bool

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

KeyType(可选)

*SSEKeyType

加密类型。SSE_KMS_SERVICE 表示 KMS 服务密钥加密,SSE_BYOK 表示 BYOK 加密。

KeyId(可选)

*string

用户主密钥 ID。使用 BYOK 加密时必须设置。

RoleArn(可选)

*string

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)
}