すべてのプロダクト
Search
ドキュメントセンター

Tablestore:データテーブルを作成する

最終更新日:Dec 28, 2024

このトピックでは、Tablestore SDK for Go を使用して、パラメーターとサンプルコードを使用してデータテーブルを作成する方法について説明します。データテーブルを作成する際には、データテーブルのスキーマ情報と構成情報を指定する必要があります。高性能インスタンスのデータテーブルに予約読み取り/書き込みスループットを指定できます。

使用上の注意

  • データテーブルを作成した後、データテーブルのロードに数秒かかります。この期間中は、データテーブルに対するすべての読み取りおよび書き込み操作は失敗します。データテーブルがロードされた後に、データテーブルに対する操作を実行してください。

  • Tablestore はデータ暗号化機能を提供します。データテーブルを作成する際に暗号化関連のパラメーターを設定することで、データのセキュリティを高め、コンプライアンス要件を満たすことができます。詳細については、暗号化テーブルを作成するをご参照ください。

  • E コマース Web サイトのアイテム ID やフォーラムの投稿 ID など、自動インクリメント主キー列が必要なシナリオでは、データテーブルの作成時に自動インクリメント主キー列を指定できます。詳細については、自動インクリメント主キー列を設定するをご参照ください。

前提条件

API 操作

// 説明:指定されたテーブルスキーマに基づいてデータテーブルを作成します。
// データテーブルを作成した後、データテーブル内のパーティションをロードするために数秒かかります。パーティションがロードされた後にのみ、データテーブルに対する操作を実行できます。
// 応答:CreateTableResponse
CreateTable(request *CreateTableRequest) (*CreateTableResponse, error) 

パラメーター

次の表は、requestに含まれるパラメーターを示しています。

パラメーター

説明

TableMeta (必須)

データテーブルに関するスキーマ情報。次のパラメーターを設定して、スキーマ情報を指定できます。

  • TableName:このパラメーターは必須であり、データテーブルの名前を指定します。

  • SchemaEntry:このパラメーターは必須であり、データテーブルの主キーのスキーマを指定します。詳細については、コアコンポーネントをご参照ください。

    • 主キー列の型は、String、Integer、または Binary にすることができます。

    • 1 ~ 4 つの主キー列を指定できます。Tablestore は、主キー列が指定された順序で主キーを生成します。デフォルトでは、データテーブルの行は主キーの降順でソートされます。

    • 最初の主キー列はパーティションキーです。

  • DefinedColumns:このパラメーターはオプションであり、データテーブルの定義済み列を指定します。定義済み列の型は、String、Integer、Binary、Double、または Boolean にすることができます。

    説明
    • 定義済み列は、主キー列ではない列で、データテーブルに対して作成されたセカンダリインデックスの主キー列または定義済み列として使用して、データクエリを高速化できます。

    • データテーブルを作成するときに属性列のスキーマを指定する必要はありません。データテーブルにデータを書き込むときに、行ごとに異なる数の属性列と異なる属性列名を指定できます。

TableOption (必須)

データテーブルに関する構成情報。次のパラメーターを設定して、構成情報を指定できます。

  • TimeToAlive:このパラメーターは必須であり、データテーブル内のデータの保持期間を指定します。単位:秒。

    このパラメーターは、86400 以上または -1 に設定できます。値 86400 は 1 日を指定します。値 -1 は、データが期限切れにならないことを指定します。

    重要

    データテーブルの検索インデックスまたはセカンダリインデックスを作成する場合、このパラメーターを -1 に設定するか、AllowUpdate パラメーターを false に設定する必要があります。

  • MaxVersion:このパラメーターは必須であり、各属性列のデータに保持できる最大バージョン数を指定します。

    重要

    データテーブルの検索インデックスまたはセカンダリインデックスを作成する場合、このパラメーターを 1 に設定する必要があります。

  • DeviationCellVersionInSec:このパラメーターはオプションであり、現在のシステム時刻と書き込まれたデータのタイムスタンプの最大差を指定します。単位:秒。

    デフォルト値:86400。属性列のデータの有効なバージョン範囲は、左閉右開区間であり、次の式を使用して計算されます。有効なバージョン範囲 = [max{データ書き込み時刻 - 最大バージョンオフセット, データ書き込み時刻 - TTL 値}, データ書き込み時刻 + 最大バージョンオフセット)

  • AllowUpdate:このパラメーターはオプションであり、データテーブルに対する更新操作を許可するかどうかを指定します。デフォルト値:true。

    重要

    データテーブルに対して作成された検索インデックスの Time To Live(TTL)機能を使用する場合、このパラメーターを false に設定する必要があります。データテーブルのデータを更新する場合は、PutRow 操作を呼び出してデータテーブルにデータを書き込むことができます。

IndexMetas (オプション)

インデックスのリスト。各インデックスに対して次のパラメーターを設定できます。

  • IndexName:このパラメーターは必須であり、インデックスの名前を指定します。

  • PrimaryKey:このパラメーターは必須であり、インデックスの主キー列を指定します。インデックスの主キー列は、インデックスが作成されたデータテーブルの主キー列と定義済み列の組み合わせです。

    重要

    ローカルセカンダリインデックスを作成する場合、インデックスの最初の主キー列は、データテーブルの最初の主キー列である必要があります。

  • DefinedColumns:このパラメーターはオプションであり、インデックスの定義済み列を指定します。インデックスの定義済み列は、インデックスが作成されたデータテーブルの定義済み列の組み合わせです。

  • IndexType:このパラメーターはオプションであり、インデックスの型を指定します。有効な値:

    • IT_GLOBAL_INDEX:グローバルセカンダリインデックス。これがデフォルト値です。

    • IT_LOCAL_INDEX:ローカルセカンダリインデックス。

ReservedThroughput (必須)

予約読み取り/書き込みスループット。単位:キャパシティユニット(CU)。デフォルト値:0。

重要

高性能インスタンスのデータテーブルの場合のみ、予約読み取り/書き込みスループットを 0 以外の値に設定できます。

StreamSpec (オプション)

データテーブルに関する Stream 構成情報。次のパラメーターを設定して、Stream 構成情報を指定できます。

  • EnableStream:このパラメーターはオプションであり、Stream 機能を有効にするかどうかを指定します。デフォルト値:false。値 false は、Stream 機能が無効になっていることを指定します。

  • ExpirationTime:このパラメーターはオプションであり、増分ログの有効期間を指定します。単位:時間。最大値:168。値 168 は 7 日を指定します。

    説明

    Stream 機能を有効にする場合は、expirationTime パラメーターを設定する必要があります。

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)

    // ローカルトランザクション機能を有効にします。データテーブルに自動インクリメント主キー列を指定した場合、ローカル

参照