全部產品
Search
文件中心

Tablestore:建立資料表

更新時間:Jun 20, 2025

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

注意事項

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

前提條件

初始化Tablestore Client

方法說明

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

CreateTableRequest參數說明

  • TableMeta(必選)*TableMeta:表結構資訊,包含以下參數。

    名稱

    類型

    說明

    TableName(必選)

    string

    資料表名稱。

    SchemaEntry(必選)

    []*PrimaryKeySchema

    主鍵資訊。

    • 可以設定1~4個主鍵列,預設按升序進行排序,第一個主鍵列將作為分區鍵。

    • 主鍵資料類型包含STRING、INTEGER和BINARY,非分區鍵中整型的主鍵列可以設定主鍵列自增

    DefinedColumns(可選)

    []*DefinedColumnSchema

    預定義列資訊。

    • 預定義列是預先定義的屬性列,可以用於建立二級索引多元索引

    • 預定義列資料類型包含STRING、INTEGER、BINARY、DOUBLE和BOOLEAN。

  • 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 及以上版本支援此功能。

    • 局部事務功能和主鍵列自增無法同時使用,如果您配置了主鍵列自增,局部事務功能即使設定開啟也不會生效。

    • 如果建立資料表時未開啟局部事務功能,建立資料表後需要使用該功能,請提交工單進行申請

  • SSESpecification(可選)*SSESpecification資料加密設定,包含以下參數。

    重要

    資料加密功能只支援在建立資料表時開啟和配置,建立資料表後無法關閉加密功能。

    名稱

    類型

    說明

    Enable(可選)

    bool

    是否開啟資料加密功能,預設值為false。

    KeyType(可選)

    *SSEKeyType

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

    • SSE_KMS_SERVICE:KMS加密。

    • SSE_BYOK:BYOK加密。

    KeyId(可選)

    *string

    使用者主要金鑰ID。僅當keyType為SSE_BYOK時需設定此參數。

    RoleArn(可選)

    *string

    RAM角色ARN。僅當keyType為SSE_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加密

      說明

      運行代碼前需要擷取使用者主要金鑰ID和RAM角色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

相關文檔