本文將通過參數說明和示例代碼為您介紹如何使用 Go SDK 創建數據表。在創建數據表時,您需要指定數據表的結構信息和配置信息。CU 模式(原按量模式)下高性能型實例中的數據表還可以根據需要設置預留讀寫吞吐量。
注意事項
前提條件
已通過控制臺創建實例。具體操作,請參見創建實例。
已初始化 OTSClient。具體操作,請參見初始化 OTSClient。
接口
//說明:根據指定表結構信息創建數據表。
//當創建一個數據表后,通常需要等待幾秒鐘時間使partition load完成,才能進行各種操作。
//返回:CreateTableResponse
CreateTable(request *CreateTableRequest) (*CreateTableResponse, error)
參數說明
request
包含以下參數:
參數 | 說明 |
TableMeta(必選) | 數據表的結構信息,包括如下內容:
|
TableOption(必選) | 數據表的配置信息,包括如下內容:
|
IndexMetas(可選) | 索引列表。每個索引包含以下內容:
|
ReservedThroughput(必選) | 預留讀寫吞吐量,單位為 CU。默認值為 0。 重要 僅 CU 模式下高性能型實例支持設置數據表的預留讀寫吞吐量為非零值。 |
StreamSpec(可選) | 數據表的 Stream 配置信息,包括如下內容:
|
SSESpecification(可選) | 數據表的加密配置。 重要 數據表創建后,不支持修改加密相關配置。 |
EnableLocalTxn(可選) | 是否開啟局部事務功能。默認值為 false,表示不開啟局部事務功能。 重要
|
示例
創建數據表
以下示例用于創建數據表。
func CreateTableSample(client *tablestore.TableStoreClient, tableName string) {
createTableRequest := new(tablestore.CreateTableRequest)
tableMeta := new(tablestore.TableMeta)
//設置數據表名稱。
tableMeta.TableName = tableName
//為數據表添加主鍵列。主鍵為pk1(String類型)和pk2(Integer類型),其中pk1主鍵列為分區鍵,pk2主鍵列為自增列。
tableMeta.AddPrimaryKeyColumn("pk1", tablestore.PrimaryKeyType_STRING)
tableMeta.AddPrimaryKeyColumnOption("pk2", tablestore.PrimaryKeyType_INTEGER, tablestore.AUTO_INCREMENT)
tableOption := new(tablestore.TableOption)
//數據的過期時間,-1表示永不過期。
tableOption.TimeToAlive = -1
//最大版本數,屬性列值最多保留1個版本,即保存最新的版本。
tableOption.MaxVersion = 1
//有效版本偏差,即寫入數據的時間戳與系統當前時間的偏差允許最大值為86400秒(1天)。
tableOption.DeviationCellVersionInSec = 86400
//設置預留讀寫吞吐量,容量型實例下的數據表只能設置為0,高性能型實例下的數據表可以設置為非零值。
reservedThroughput := new(tablestore.ReservedThroughput)
reservedThroughput.Readcap = 0
reservedThroughput.Writecap = 0
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")
}
}
創建數據表時配置二級索引
創建數據表時配置全局二級索引
以下示例用于同時創建數據表和全局二級索引。
func CreateTableWithGlobalIndexSample(client *tablestore.TableStoreClient, tableName string) {
createTableRequest := new(tablestore.CreateTableRequest)
tableMeta := new(tablestore.TableMeta)
//設置數據表名稱。
tableMeta.TableName = tableName
//為數據表添加主鍵列。主鍵為pk1(String類型)和pk2(Integer類型)。
tableMeta.AddPrimaryKeyColumn("pk1", tablestore.PrimaryKeyType_STRING)
tableMeta.AddPrimaryKeyColumn("pk2", tablestore.PrimaryKeyType_INTEGER)
//為數據表添加預定義列。預定義列為defcol1(String類型)和defcol2(Integer類型)。
tableMeta.AddDefinedColumn("defcol1", tablestore.DefinedColumn_STRING)
tableMeta.AddDefinedColumn("defcol2", tablestore.DefinedColumn_INTEGER)
tableOption := new(tablestore.TableOption)
//數據永不過期,-1表示永不過期。
tableOption.TimeToAlive = -1
//最大版本數,屬性列值最多保留1個版本,即保存最新的版本。。
tableOption.MaxVersion = 1
reservedThroughput := new(tablestore.ReservedThroughput)
//全局二級索引
indexMeta := new(tablestore.IndexMeta)
//設置索引名稱。
indexMeta.IndexName = "<INDEX_NAME>"
//為索引添加主鍵列。主鍵列為defcol1、pk1和pk2
indexMeta.AddPrimaryKeyColumn("defcol1")
indexMeta.AddPrimaryKeyColumn("pk1")
indexMeta.AddPrimaryKeyColumn("pk2")
//為索引添加預定義列。預定義列為defcol2。
indexMeta.AddDefinedColumn("defcol2")
createTableRequest.TableMeta = tableMeta
createTableRequest.TableOption = tableOption
createTableRequest.ReservedThroughput = reservedThroughput
createTableRequest.AddIndexMeta(indexMeta)
_, err := client.CreateTable(createTableRequest)
if err != nil {
fmt.Println("Failed to create table with error:", err)
} else {
fmt.Println("Create table finished")
}
}
創建數據表時配置本地二級索引
以下示例用于同時創建數據表和本地二級索引。
func CreateTableWithLocalIndexSample(client *tablestore.TableStoreClient, tableName string) {
createTableRequest := new(tablestore.CreateTableRequest)
tableMeta := new(tablestore.TableMeta)
//設置數據表名稱。
tableMeta.TableName = tableName
//為數據表添加主鍵列。主鍵為pk1(String類型)和pk2(Integer類型)。
tableMeta.AddPrimaryKeyColumn("pk1", tablestore.PrimaryKeyType_STRING)
tableMeta.AddPrimaryKeyColumn("pk2", tablestore.PrimaryKeyType_INTEGER)
//為數據表添加預定義列。預定義列為defcol1(String類型)和defcol2(Integer類型)。
tableMeta.AddDefinedColumn("defcol1", tablestore.DefinedColumn_STRING)
tableMeta.AddDefinedColumn("defcol2", tablestore.DefinedColumn_INTEGER)
tableOption := new(tablestore.TableOption)
//數據永不過期,-1表示永不過期。
tableOption.TimeToAlive = -1
//最大版本數,屬性列值最多保留1個版本,即保存最新的版本。
tableOption.MaxVersion = 1
reservedThroughput := new(tablestore.ReservedThroughput)
//本地二級索引
indexMeta := new(tablestore.IndexMeta)
//設置索引名稱。
indexMeta.IndexName = "<INDEX_NAME>"
//設置索引類型為本地二級索引(IT_LOCAL_INDEX)。
indexMeta.IndexType = tablestore.IT_LOCAL_INDEX
//為索引添加主鍵列。主鍵列為pk1、defcol1和pk2。
indexMeta.AddPrimaryKeyColumn("pk1")
indexMeta.AddPrimaryKeyColumn("defcol1")
indexMeta.AddPrimaryKeyColumn("pk2")
//為索引添加預定義列。預定義列為defcol2。
indexMeta.AddDefinedColumn("defcol2")
createTableRequest.TableMeta = tableMeta
createTableRequest.TableOption = tableOption
createTableRequest.ReservedThroughput = reservedThroughput
createTableRequest.AddIndexMeta(indexMeta)
_, err := client.CreateTable(createTableRequest)
if err != nil {
fmt.Println("Failed to create table with error:", err)
} else {
fmt.Println("Create table finished")
}
}
創建數據表時開啟局部事務
以下示例用于創建數據表時開啟局部事務功能。
func CreateTableWithEnableLocalTxnSample(client *tablestore.TableStoreClient, tableName string) {
createTableRequest := new(tablestore.CreateTableRequest)
tableMeta := new(tablestore.TableMeta)
//設置數據表名稱。
tableMeta.TableName = tableName
//為數據表添加主鍵列。主鍵為pk1(String類型)和pk2(Integer類型)。
tableMeta.AddPrimaryKeyColumn("pk1", tablestore.PrimaryKeyType_STRING)
tableMeta.AddPrimaryKeyColumn("pk2", tablestore.PrimaryKeyType_INTEGER)
tableOption := new(tablestore.TableOption)
//數據的過期時間,-1表示永不過期。
tableOption.TimeToAlive = -1
//最大版本數,屬性列值最多保留1個版本,即保存最新的版本。
tableOption.MaxVersion = 1
reservedThroughput := new(tablestore.ReservedThroughput)
//開啟局部事務。如果數據表配置了主鍵自增列,則開啟局部事務配置不會生效。
enableLocalTxn := proto.Bool(true)
createTableRequest.TableMeta = tableMeta
createTableRequest.TableOption = tableOption
createTableRequest.ReservedThroughput = reservedThroughput
createTableRequest.EnableLocalTxn = enableLocalTxn
_, err := client.CreateTable(createTableRequest)
if err != nil {
fmt.Println("Failed to create table with error:", err)
} else {
fmt.Println("Create table finished")
}
}