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

Tablestore:データテーブルの作成

最終更新日:Jul 31, 2025

このトピックでは、PHP SDK を使用して Tablestore データテーブルを作成する方法について説明します。

使用上の注意

データテーブルを作成した後、データに対して操作を実行する前に、テーブルがロードされるまで待機してください。そうしないと、操作は失敗します。このプロセスには通常数秒かかります。

前提条件

Tablestore クライアントを初期化する

メソッドの説明

public function createTable(array $request)

$request パラメーターの説明

  • table_meta (必須) object: テーブル構造情報。以下のパラメーターが含まれます。

    名前

    説明

    table_name (必須)

    string

    データテーブルの名前。

    primary_key_schema (必須)

    array

    プライマリキーに関する情報。

    • 1 ~ 4 個のプライマリキー列を設定できます。デフォルトでは昇順でソートされます。最初のプライマリキー列はパーティションキーとして機能します。

    • プライマリキーのデータ型には、STRING、INTEGER、BINARY があります。パーティションキーではない整数型のプライマリキー列は、自動採番主キー列として設定できます。

    defined_column (オプション)

    array

    事前定義列の情報。

  • table_options (オプション) object: テーブル構成情報。以下のパラメーターが含まれます。

    名前

    説明

    time_to_live (オプション)

    int

    データのライフサイクル(秒単位)。デフォルト値: -1。

    • このパラメーターを -1 に設定すると、データの有効期限は切れなくなります。それ以外の場合は、最小値は 86400 (1 日) です。ライフサイクルを超えたデータは自動的にクリアされます。

    • 多次元インデックスまたはセカンダリインデックスを使用する場合は、データのライフサイクルを -1 に設定するか、allow_update パラメーターを false に設定する必要があります。

    max_versions (オプション)

    int

    バージョンの最大数。デフォルト値: 1。

    • 多次元インデックスまたはセカンダリインデックスを使用する場合は、バージョンの最大数を 1 に設定する必要があります。

    deviation_cell_version_in_sec (オプション)

    int

    バージョンのオフセットの最大値(秒単位)。デフォルト値: 86400 (1 日)。

    • 書き込まれたデータのタイムスタンプと現在のシステム時間の差は、バージョンのオフセットの最大範囲内である必要があります。そうでない場合、データの書き込みは失敗します。

    • 属性列データの有効なバージョン範囲は、[max(データ書き込み時間 - 最大バージョンオフセット, データ書き込み時間 - TTL 値), データ書き込み時間 + 最大バージョンオフセット) です。

    allow_update (オプション)

    bool

    更新を許可するかどうかを指定します。デフォルト値: true。

    • このパラメーターを false に設定すると、updateRow() メソッドを使用してデータを更新することはできません。

  • index_metas (オプション) object: セカンダリインデックスのリスト。各インデックスには、以下のパラメーターが含まれます。

    名前

    説明

    name (必須)

    string

    インデックスの名前。

    primary_key (必須)

    array

    インデックスのプライマリキー列。

    • インデックスのプライマリキー列は、データテーブルのプライマリキー列と事前定義列の組み合わせです。

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

    defined_column (必須)

    array

    インデックスの事前定義列。

    • 事前定義列は、データテーブルの事前定義列から取得されます。

    index_type (オプション)

    string

    インデックスの型。有効な値:

    • GLOBAL_INDEX (デフォルト値): グローバルセカンダリインデックス。

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

    index_update_mode (オプション)

    string

    インデックスの更新モード。有効な値:

    • ASYNC_INDEX (デフォルト値): 非同期更新。グローバルセカンダリインデックスの更新モードは、非同期更新に設定する必要があります。

    • SYNC_INDEX: 同期更新。ローカルセカンダリインデックスの更新モードは、同期更新に設定する必要があります。

  • stream_spec (オプション) object: Stream 構成情報。以下のパラメーターが含まれます。

    名前

    説明

    enable_stream (オプション)

    bool

    Stream を有効にするかどうかを指定します。デフォルト値: false。

    expiration_time (オプション)

    int

    Stream の有効期限。増分ログの保存期間を示します。単位: 時間。最大値: 168 (7 日)。

    • enable_stream を true に設定する場合は、expiration_time を設定する必要があります。

  • reserved_throughput (必須) object: 予約済み読み取り/書き込みスループット (CU 単位)。 CU モードの高性能インスタンスのみ、ゼロ以外の値に設定して有効にすることができます。

サンプルコード

データテーブルの作成

次のサンプルコードは、1 つの String 型のプライマリキーを含む test_table テーブルを作成します。

$request = array (
    // テーブル構造情報
    'table_meta' => array (
        'table_name' => 'test_table',
        // データテーブルを作成するには、少なくとも 1 つのプライマリキーが必要です
        'primary_key_schema' => array (
            array('id', PrimaryKeyTypeConst::CONST_STRING)
        ),
        // (オプション) 事前定義列を追加します
        'defined_column' => array (
            array('name', DefinedColumnTypeConst::DCT_STRING)
        )
    ), 
    // (オプション) テーブル構成情報
    'table_options' => array (
        // (オプション) データのライフサイクル。-1 は、データの有効期限が切れないことを示します
        'time_to_live' => -1,
        // (オプション) バージョンの最大数
        'max_versions' => 1,
        // (オプション) 最大バージョンオフセット
        'deviation_cell_version_in_sec' => 86400,
        // (オプション) 更新を許可するかどうか
        'allow_update' => true
    ), 
    // (オプション) Stream 情報を設定します
    'stream_spec' => array (
        'enable_stream' => true,
        'expiration_time' => 168
    ),
    // データテーブルを作成するときは、予約済みの読み取り/書き込みスループットを設定する必要があります (CU モードの高性能インスタンスのみ、予約済みの読み取り/書き込みスループットにゼロ以外の値を設定できます)
    'reserved_throughput' => array (
        'capacity_unit' => array (
            'read' => 0,
            'write' => 0
        )
    )
);

try{
    $client->createTable( $request );
    echo "Create table succeeded."; // テーブルの作成に成功しました。
} catch (Exception $e) {
    echo "Create table failed."; // テーブルの作成に失敗しました。
}

セカンダリインデックスを持つデータテーブルを作成する

次のサンプルコードは、セカンダリインデックスを持つデータテーブルを作成します。

$request = array (
    // テーブル構造情報
    'table_meta' => array (
        'table_name' => 'test_table',
        // プライマリキー
        'primary_key_schema' => array (
            array('id', PrimaryKeyTypeConst::CONST_STRING)
        ),
        // 事前定義列
        'defined_column' => array (
            array('name', DefinedColumnTypeConst::DCT_STRING)
        )
    ), 
    // 予約済みの読み取り/書き込みスループット (CU モードの高性能インスタンスのみ、予約済みの読み取り/書き込みスループットにゼロ以外の値を設定できます)
    'reserved_throughput' => array (
        'capacity_unit' => array (
            'read' => 0,
            'write' => 0
        )
    ),
    // セカンダリインデックス情報
    'index_metas' => array(
        array(
            'name' => 'test_table_index',
            'primary_key' => array('id'),
            'defined_column' => array('name'),
            'index_type' => IndexTypeConst::LOCAL_INDEX,
            'index_update_mode' => IndexUpdateModeConst::SYNC_INDEX
        )
    )
);

try{
    $client->createTable( $request );
    echo "Create table succeeded."; // テーブルの作成に成功しました。
} catch (Exception $e) {
    echo "Create table failed."; // テーブルの作成に失敗しました。
}

関連情報