全部产品
Search
文档中心

表格存储:创建数据表

更新时间:Jun 25, 2025

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

注意事项

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

前提条件

初始化Tablestore Client

方法说明

public CreateTableResponse CreateTable(CreateTableRequest request)

异步方法:

public Task<CreateTableResponse> CreateTableAsync(CreateTableRequest request)

CreateTableRequest参数说明

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

    名称

    类型

    说明

    TableName(必选)

    string

    数据表名称。

    PrimaryKeySchema(必选)

    PrimaryKeySchema

    主键信息。

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

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

    DefinedColumnSchema(可选)

    DefinedColumnSchema

    预定义列信息。

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

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

  • TableOptions(可选)TableOptions:表配置信息,包含以下参数。

    名称

    类型

    说明

    TimeToLive(可选)

    int

    数据生命周期,单位为秒,默认值为-1。

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

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

    MaxVersions(可选)

    int

    最大版本数,默认值为1。

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

    DeviationCellVersionInSec(可选)

    long

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

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

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

    AllowUpdate(可选)

    bool

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

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

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

    名称

    类型

    说明

    IndexName(必选)

    string

    索引名称。

    PrimaryKey(必选)

    List<string>

    索引的主键列。

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

    DefinedColumns(可选)

    List<string>

    索引的预定义列。

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

    IndexType(可选)

    IndexType

    索引类型,固定取值为IT_GLOBAL_INDEX,表示全局二级索引。

    IndexUpdateModel(可选)

    IndexUpdateMode

    索引更新模式,固定取值为IUM_ASYNC_INDEX,表示异步更新。

    • 全局二级索引的更新模式必须设置为异步更新。

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

    名称

    类型

    说明

    EnableStream(必选)

    bool

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

    ExpirationTime(可选)

    int

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

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

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

示例代码

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

try
{
    // 创建数据表至少需要添加一个主键
    PrimaryKeySchema primaryKeySchema = new PrimaryKeySchema
    {
        { "id", ColumnValueType.String }
    };
    // 构造数据表的结构信息
    TableMeta tableMeta = new TableMeta("test_table", primaryKeySchema);

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

    // 构造request并发起请求
    CreateTableRequest request = new CreateTableRequest(tableMeta, reservedThroughput);
    client.CreateTable(request);
    Console.WriteLine("Create table succeeded.");
}
catch (Exception ex)
{
    Console.WriteLine($"Create table failed, exception:{ex.Message}");
}

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

  • 添加预定义列

    DefinedColumnSchema definedColumnSchema = new DefinedColumnSchema
    {
        { "name" , DefinedColumnType.STRING }
    };
    
    tableMeta.DefinedColumnSchema = definedColumnSchema;
  • 设置有效版本偏差

     TableOptions tableOptions = new TableOptions();
     tableOptions.DeviationCellVersionInSec = 86400;
     
     request.TableOptions = tableOptions;
  • 设置是否允许更新

    TableOptions tableOptions = new TableOptions();
    tableOptions.AllowUpdate = false;
    
    request.TableOptions = tableOptions;
  • 添加二级索引

    // 构造二级索引列表
    List<IndexMeta> indexMetas = new List<IndexMeta>();
    // 构造二级索引
    IndexMeta indexMeta = new IndexMeta("test_table_index");
    // 设置索引主键
    indexMeta.PrimaryKey = new List<string>() { "id", "name" };
    // 设置索引类型
    indexMeta.IndexType = IndexType.IT_GLOBAL_INDEX;
    // 设置索引更新模型
    indexMeta.IndexUpdateModel = IndexUpdateMode.IUM_ASYNC_INDEX;
    // 添加二级索引
    indexMetas.Add(indexMeta);
    
    // 构造request请求
    CreateTableRequest request = new CreateTableRequest(tableMeta, reservedThroughput, indexMetas);
  • 设置Stream信息

    StreamSpecification streamSpecification = new StreamSpecification(true);
    streamSpecification.ExpirationTime = 168;
                    
    request.StreamSpecification = streamSpecification;

相关文档