全部產品
Search
文件中心

Tablestore:建立資料表

更新時間:Jun 20, 2025

本文介紹如何通過PHP SDK建立Table Store的資料表。

注意事項

建立資料表後,請等待資料表載入完成後再進行資料操作,否則資料操作會失敗,這個過程通常需要幾秒鐘。

前提條件

初始化Tablestore Client

方法說明

public function createTable(array $request)

$request參數說明

  • table_meta(必選)object:表結構資訊,包含以下參數。

    名稱

    類型

    說明

    table_name(必選)

    string

    資料表名稱。

    primary_key_schema(必選)

    array

    主鍵資訊。

    • 可以設定1~4個主鍵列,預設按升序進行排序,第一個主鍵列將作為分區鍵。

    • 主鍵資料類型包含STRING、INTEGER和BINARY,非分區鍵中整型的主鍵列可以設定主鍵列自增

    defined_column(可選)

    array

    預定義列資訊。

    • 預定義列是預先定義的屬性列,可以用於建立二級索引多元索引

    • 預定義列資料類型包含STRING、INTEGER、BLOB、DOUBLE 或 BOOLEAN。

  • 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(資料寫入時間-有效版本偏差, 資料寫入時間-資料生命週期), 資料寫入時間+有效版本偏差)

    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模式的高效能型執行個體可以設定為非零值且有效。

範例程式碼

建立資料表

以下範例程式碼建立了一張test_table表,該表包含1個 String類型的主鍵。

$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)
        )
    ), 
    // (可選)資料表的配置資訊
    '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.";
}

相關文檔