このトピックでは、Tablestore SDK for Go を使用して、パラメーターとサンプルコードを使用してデータテーブルを作成する方法について説明します。データテーブルを作成する際には、データテーブルのスキーマ情報と構成情報を指定する必要があります。高性能インスタンスのデータテーブルに予約読み取り/書き込みスループットを指定できます。
使用上の注意
データテーブルを作成した後、データテーブルのロードに数秒かかります。この期間中は、データテーブルに対するすべての読み取りおよび書き込み操作は失敗します。データテーブルがロードされた後に、データテーブルに対する操作を実行してください。
Tablestore はデータ暗号化機能を提供します。データテーブルを作成する際に暗号化関連のパラメーターを設定することで、データのセキュリティを高め、コンプライアンス要件を満たすことができます。詳細については、暗号化テーブルを作成するをご参照ください。
E コマース Web サイトのアイテム ID やフォーラムの投稿 ID など、自動インクリメント主キー列が必要なシナリオでは、データテーブルの作成時に自動インクリメント主キー列を指定できます。詳細については、自動インクリメント主キー列を設定するをご参照ください。
前提条件
Tablestore コンソールでインスタンスが作成されていること。詳細については、インスタンスを作成するをご参照ください。
OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスを初期化するをご参照ください。
API 操作
// 説明:指定されたテーブルスキーマに基づいてデータテーブルを作成します。
// データテーブルを作成した後、データテーブル内のパーティションをロードするために数秒かかります。パーティションがロードされた後にのみ、データテーブルに対する操作を実行できます。
// 応答:CreateTableResponse
CreateTable(request *CreateTableRequest) (*CreateTableResponse, error)
パラメーター
次の表は、request
に含まれるパラメーターを示しています。
パラメーター | 説明 |
TableMeta (必須) | データテーブルに関するスキーマ情報。次のパラメーターを設定して、スキーマ情報を指定できます。
|
TableOption (必須) | データテーブルに関する構成情報。次のパラメーターを設定して、構成情報を指定できます。
|
IndexMetas (オプション) | インデックスのリスト。各インデックスに対して次のパラメーターを設定できます。
|
ReservedThroughput (必須) | 予約読み取り/書き込みスループット。単位:キャパシティユニット(CU)。デフォルト値:0。 重要 高性能インスタンスのデータテーブルの場合のみ、予約読み取り/書き込みスループットを 0 以外の値に設定できます。 |
StreamSpec (オプション) | データテーブルに関する Stream 構成情報。次のパラメーターを設定して、Stream 構成情報を指定できます。
|
SSESpecification (オプション) | データテーブルの暗号化設定。 重要 データテーブルを作成した後、データテーブルの暗号化設定を変更することはできません。 |
EnableLocalTxn (オプション) | ローカルトランザクション機能を有効にするかどうかを指定します。デフォルト値:false。値 false は、ローカルトランザクション機能が無効になっていることを指定します。 重要
|
例
データテーブルを作成する
次のサンプルコードは、データテーブルを作成する方法の例を示しています。
func CreateTableSample(client *tablestore.TableStoreClient, tableName string) {
createTableRequest := new(tablestore.CreateTableRequest)
tableMeta := new(tablestore.TableMeta)
// データテーブルの名前を指定します。
tableMeta.TableName = tableName
// データテーブルに主キー列を追加します。テーブルには、String 型の pk1 主キー列と Integer 型の pk2 主キー列が含まれています。pk1 主キー列はパーティションキーです。pk2 主キー列は自動インクリメント主キー列です。
tableMeta.AddPrimaryKeyColumn("pk1", tablestore.PrimaryKeyType_STRING)
tableMeta.AddPrimaryKeyColumnOption("pk2", tablestore.PrimaryKeyType_INTEGER, tablestore.AUTO_INCREMENT)
tableOption := new(tablestore.TableOption)
// データテーブル内のデータの Time To Live(TTL)を指定します。値 -1 は、データテーブル内のデータが期限切れにならないことを指定します。
tableOption.TimeToAlive = -1
// データテーブルの各属性列のデータに保持できる最大バージョン数を指定します。この例では、各属性列の最新バージョンのみを保持できます。
tableOption.MaxVersion = 1
// 現在のシステム時刻と書き込まれたデータのタイムスタンプの最大差を指定します。この例では、最大差は 86,400 秒(1 日)に設定されています。
tableOption.DeviationCellVersionInSec = 86400
// 予約読み取り/書き込みスループットを指定します。キャパシティインスタンスのデータテーブルの場合、予約読み取り/書き込みスループットは 0 のみに設定できます。高性能インスタンスのデータテーブルの場合、予約読み取り/書き込みスループットを 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
// データテーブルに主キー列を追加します。データテーブルには、String 型の pk1 主キー列と Integer 型の pk2 主キー列が含まれています。
tableMeta.AddPrimaryKeyColumn("pk1", tablestore.PrimaryKeyType_STRING)
tableMeta.AddPrimaryKeyColumn("pk2", tablestore.PrimaryKeyType_INTEGER)
// データテーブルに定義済み列を追加します。データテーブルの定義済み列は、String 型の defcol1 列と Integer 型の defcol2 列です。
tableMeta.AddDefinedColumn("defcol1", tablestore.DefinedColumn_STRING)
tableMeta.AddDefinedColumn("defcol2", tablestore.DefinedColumn_INTEGER)
tableOption := new(tablestore.TableOption)
// データテーブル内のデータの TTL を指定します。値 -1 は、データテーブル内のデータが期限切れにならないことを指定します。
tableOption.TimeToAlive = -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
// データテーブルに主キー列を追加します。データテーブルには、String 型の pk1 主キー列と Integer 型の pk2 主キー列が含まれています。
tableMeta.AddPrimaryKeyColumn("pk1", tablestore.PrimaryKeyType_STRING)
tableMeta.AddPrimaryKeyColumn("pk2", tablestore.PrimaryKeyType_INTEGER)
// データテーブルに定義済み列を追加します。データテーブルの定義済み列は、String 型の defcol1 列と Integer 型の defcol2 列です。
tableMeta.AddDefinedColumn("defcol1", tablestore.DefinedColumn_STRING)
tableMeta.AddDefinedColumn("defcol2", tablestore.DefinedColumn_INTEGER)
tableOption := new(tablestore.TableOption)
// データテーブル内のデータの TTL を指定します。値 -1 は、データテーブル内のデータが期限切れにならないことを指定します。
tableOption.TimeToAlive = -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
// データテーブルに主キー列を追加します。データテーブルには、String 型の pk1 主キー列と Integer 型の pk2 主キー列が含まれています。
tableMeta.AddPrimaryKeyColumn("pk1", tablestore.PrimaryKeyType_STRING)
tableMeta.AddPrimaryKeyColumn("pk2", tablestore.PrimaryKeyType_INTEGER)
tableOption := new(tablestore.TableOption)
// データテーブル内のデータの TTL を指定します。値 -1 は、データテーブル内のデータが期限切れにならないことを指定します。
tableOption.TimeToAlive = -1
// データテーブルの各属性列のデータに保持できる最大バージョン数を指定します。この例では、各属性列の最新バージョンのみを保持できます。
tableOption.MaxVersion = 1
reservedThroughput := new(tablestore.ReservedThroughput)
// ローカルトランザクション機能を有効にします。データテーブルに自動インクリメント主キー列を指定した場合、ローカル
参照
データテーブルを作成するために呼び出すことができる API オペレーションについては、CreateTable を参照してください。
データバージョンと TTL、セカンダリインデックス、予約済み読み取り/書き込みスループットについては、データバージョンと TTL、概要、および 予約済み読み取り/書き込みスループットとは を参照してください。
データテーブルを作成した後、以下の操作を実行できます。
テーブルに対する操作。詳細については、テーブルに対する操作 を参照してください。
データに対する操作。詳細については、データに対する基本操作 を参照してください。