Go SDK 可在建立資料表時將非分區主鍵列配置為自增列,並在寫入資料時擷取服務端產生的自增值。
前提條件
安裝Tablestore Go SDK並初始化用戶端。
功能說明
主鍵列自增包含配置自增列、寫入自增預留位置和擷取自增值三個步驟。
只能在建立資料表時將非分區主鍵列配置為自增列。自增列必須為整數類型,每張資料表最多配置一個自增列。服務端產生的自增值為 64 位元有符號整數。
自增值在同一分區鍵內唯一且嚴格遞增,但不保證連續。主鍵列自增和局部事務不能同時使用。
配置自增主鍵列
建立資料表時,調用 AddPrimaryKeyColumnOption 並將主鍵列配置設定為 AUTO_INCREMENT。
以下樣本建立 example_table 資料表,使用 user_id 作為分區鍵,使用 record_id 作為自增主鍵列。
tableMeta := &tablestore.TableMeta{TableName: "example_table"}
tableMeta.AddPrimaryKeyColumn("user_id", tablestore.PrimaryKeyType_STRING)
tableMeta.AddPrimaryKeyColumnOption(
"record_id",
tablestore.PrimaryKeyType_INTEGER,
tablestore.AUTO_INCREMENT,
)
request := &tablestore.CreateTableRequest{
TableMeta: tableMeta,
TableOption: &tablestore.TableOption{TimeToAlive: -1, MaxVersion: 1},
ReservedThroughput: &tablestore.ReservedThroughput{},
}
_, err := client.CreateTable(request)
if err != nil {
log.Fatal(err)
}
建立資料表後,等待資料表載入完成再寫入資料。
寫入資料並擷取自增值
寫入資料時,調用 AddPrimaryKeyColumnWithAutoIncrement 為自增列設定預留位置,並調用 SetReturnPk 使響應返回包含自增值的完整主鍵。自增主鍵寫入的行存在性條件必須設定為 RowExistenceExpectation_IGNORE。
以下樣本寫入一行資料並擷取服務端產生的 record_id 值。
primaryKey := &tablestore.PrimaryKey{}
primaryKey.AddPrimaryKeyColumn("user_id", "user-a")
primaryKey.AddPrimaryKeyColumnWithAutoIncrement("record_id")
change := &tablestore.PutRowChange{
TableName: "example_table",
PrimaryKey: primaryKey,
}
change.AddColumn("status", "created")
change.SetCondition(tablestore.RowExistenceExpectation_IGNORE)
change.SetReturnPk()
response, err := client.PutRow(&tablestore.PutRowRequest{PutRowChange: change})
if err != nil {
log.Fatal(err)
}
fmt.Println(response.PrimaryKey)
參數說明
自增主鍵列
PrimaryKeySchema 包含以下與主鍵列自增相關的參數。
|
名稱 |
類型 |
說明 |
|
Name(必選) |
|
自增主鍵列名稱。 |
|
Type(必選) |
|
必須設定為 |
|
Option(必選) |
|
必須設定為 |
寫入配置
PutRowChange 包含以下與主鍵列自增相關的參數。
|
名稱 |
類型 |
說明 |
|
PrimaryKey(必選) |
|
行主鍵。自增列必須通過 |
|
Condition(必選) |
|
行存在性條件。主鍵列自增寫入必須設定為 |
|
ReturnType(可選) |
|
傳回型別。預設值為 |
傳回值
PutRowResponse 中與主鍵列自增直接相關的返回欄位如下。
|
欄位 |
類型 |
說明 |
|
|
|
寫入行的完整主鍵。僅設定 |