全部產品
Search
文件中心

Tablestore:建立資料表

更新時間:Jun 26, 2025

本文介紹如何通過.NET SDK建立Table Store的資料表。

注意事項

建立資料表後,請等待資料表載入完成後再進行資料操作,否則資料操作會失敗,這個過程通常需要幾秒鐘。

前提條件

初始化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;

相關文檔