全部產品
Search
文件中心

Tablestore:建立資料表

更新時間:Jul 02, 2024

使用CreateTable介面建立資料表時,需要指定資料表的結構資訊和配置資訊,高效能執行個體中的資料表還可以根據需要設定預留讀/寫輸送量。建立資料表時支援建立一個或者多個索引表。

注意事項

  • 建立資料表後需要幾秒鐘進行載入,在此期間對該資料表的讀寫資料操作均會失敗。請等待資料表載入完畢後再進行資料操作。

  • 建立資料表時必須指定資料表的主鍵。主鍵包含1個~4個主鍵列,每一個主鍵列都包括名稱和類型。

  • 如果系統設計中存在為特定目標產生唯一標識的情境,例如電商網站的商品ID、大型網站的使用者ID、論壇文章的ID、聊天工具的訊息ID等,您可以通過在建立資料表時配置主鍵列自增實現。具體操作,請參見主鍵列自增

前提條件

介面

/**
 * 建立資料表,並設定主鍵的個數、名稱、順序和類型,以及預留讀寫輸送量、TTL和stream選項。
 * @api
 * @param [] $request 請求參數。
 * @return [] 返回為空白。CreateTable成功時不返回任何資訊,此處返回一個空的array,與其他API保持一致。
 * @throws OTSClientException 當參數檢查出錯或服務端返回校正出錯時拋出異常。
 * @throws OTSServerException 當OTS服務端返回錯誤時拋出異常。
 */
public function createTable(array $request);           

參數

請求資訊

請求參數

參數

說明

table_meta

資料表的結構資訊,包括如下內容:

  • table_name:資料表名稱。

  • primary_key_schema:資料表的主鍵定義。更多資訊,請參見主鍵和屬性

    說明

    屬性列不需要定義。Table Store每行的資料列都可以不同,屬性列的列名在寫入時指定。

    • 每一項的順序是主鍵名,主鍵類型PrimaryKeyType,主鍵設定PrimaryKeyOption(可選)。

      PrimaryKeyType可以是INTEGER、STRING(UTF-8編碼字串)、BINARY三種,分別用PrimaryKeyTypeConst::CONST_INTEGERPrimaryKeyTypeConst::CONST_STRINGPrimaryKeyTypeConst::CONST_BINARY表示。

      PrimaryKeyOption可以是PK_AUTO_INCR(自增列),用PrimaryKeyOptionConst::CONST_PK_AUTO_INCR表示。更多資訊,請參見主鍵列自增

    • Table Store可包含1個~4個主鍵列。主鍵列是有順序的,與使用者添加的順序相同。例如PRIMARY KEY(A, B, C)與PRIMARY KEY(A, C, B)是不同的兩個主鍵結構。Table Store會按照整個主鍵的大小對行進行排序。

    • 第一列主鍵作為分區鍵。分區鍵相同的資料會存放在同一個分區內,所以相同分區鍵的資料下盡量不要超過10 GB,否則會導致單分區過大,無法分裂。另外,資料的讀/寫訪問最好在不同的分區鍵上均勻分布,有利於負載平衡。

  • defined_column:預先定義一些非主鍵列以及其類型,可以作為索引表的屬性列或索引列。

table_options

資料表的配置資訊。更多資訊,請參見資料版本和生命週期

配置資訊包括如下內容:

  • time_to_live:資料生命週期,即資料的到期時間。當資料的儲存時間超過設定的資料生命週期時,系統會自動清理超過資料生命週期的資料。

    資料生命週期至少為86400秒(一天)或-1(資料永不到期)。

    建立資料表時,如果希望資料永不到期,可以設定資料生命週期為-1;建立資料表後,可以通過UpdateTable介面動態修改資料生命週期。

    單位為秒。

    說明

    如果需要使用索引,則資料生命週期必須滿足如下條件中的任意一個。

    • 資料表的資料生命週期為-1(資料永不到期)。

    • 資料表的資料生命週期不為-1時,資料表為禁止更新狀態。

  • max_versions:最大版本數,即屬性列能夠保留資料的最大版本個數。當屬性列資料的版本個數超過設定的最大版本數時,系統會自動刪除較早版本的資料。

    建立資料表時,可以自訂屬性列的最大版本數;建立資料表後,可以通過UpdateTable介面動態修改資料表的最大版本數。

    說明

    如果需要使用索引,則最大版本數必須設定為1。

  • deviation_cell_version_in_sec:有效版本偏差,即寫入資料的時間戳記與系統目前時間的偏差允許最大值。只有當寫入資料所有列的版本號碼與寫入時時間的差值在資料有效版本偏差範圍內,資料才能成功寫入。

    屬性列的有效版本範圍為[max{資料寫入時間-有效版本偏差,資料寫入時間-資料生命週期},資料寫入時間+有效版本偏差)

    建立資料表時,如果未設定有效版本偏差,系統會使用預設值86400;建立資料表後,可以通過UpdateTable介面動態修改有效版本偏差。

    單位為秒。

  • allow_update:是否允許UpdateRow相關更新寫入操作。預設值為true,表示允許UpdateRow相關更新寫入操作;當設定allow_update為false時,表示禁止UpdateRow相關更新寫入操作。

reserved_throughput

為資料表配置預留讀輸送量或預留寫輸送量。

容量型執行個體中的資料表的預留讀/寫輸送量只能設定為0,不允許預留。

預設值為0,即完全隨用隨付。

單位為CU。

  • 當預留讀輸送量或預留寫輸送量大於0時,Table Store會根據配置為資料表預留相應資源,且資料表建立成功後,將會立即按照預留輸送量開始計費,超出預留的部分進行隨用隨付。更多資訊,請參見計費概述

  • 當預留讀輸送量或預留寫輸送量設定為0時,Table Store不會為資料表預留相應資源。

stream_spec

Stream相關設定(可選配置)。

  • enable_stream:資料表是否開啟Stream。

  • expiration_time:Stream資料的到期時間,較早的修改記錄將會被刪除,單位為小時。

    只有當設定enable_stream為true時才能設定此參數。

index_metas

索引表的結構資訊,每個index_meta都包括如下內容:

  • name:索引表名稱。

  • primary_key:索引表的索引列,索引列為資料表主鍵和預定義列的任意組合。

  • defined_column:索引表的屬性列,索引表屬性列為資料表的預定義列的組合。

  • index_update_mode:索引表更新模式。可選值包括IndexUpdateModeConst::ASYNC_INDEXIndexUpdateModeConst::SYNC_INDEX

    • 當不設定index_update_mode或者設定index_update_mode為IndexUpdateModeConst::ASYNC_INDEX時,表示非同步更新。

      使用全域二級索引時,索引更新模式必須設定為非同步更新(IndexUpdateModeConst::ASYNC_INDEX)。

    • 當設定index_update_mode為IndexUpdateModeConst::SYNC_INDEX時,表示同步更新。

      使用本地二級索引時,索引更新模式必須設定為同步更新(IndexUpdateModeConst::SYNC_INDEX)。

  • index_type:索引表類型。可選值包括IndexTypeConst::GLOBAL_INDEXIndexTypeConst::LOCAL_INDEX

    • 當不設定index_type或者設定index_type為IndexTypeConst::GLOBAL_INDEX時,表示使用全域二級索引。

      使用全域索引時,Table Store以非同步方式將資料表中被索引的列和主鍵列的資料自動同步到索引表中,正常情況下同步延遲達到毫秒層級。

    • 當設定index_type為IndexTypeConst::LOCAL_INDEX時,表示使用本地二級索引。

      使用本地二級索引時,Table Store以同步方式將資料表中被索引的列和主鍵列的資料自動同步到索引表中,當資料寫入資料表後,即可從索引表中查詢到資料。

請求格式

$result = $client->createTable([
    'table_meta' => [                  //設定資料表結構資訊,必須配置。
        'table_name' => '<string>', 
        'primary_key_schema' => [
            ['<string>', <PrimaryKeyType>], 
            ['<string>', <PrimaryKeyType>],
            ['<string>', <PrimaryKeyType>, <PrimaryKeyOption>]
        ]
    ], 
    'reserved_throughput' => [         //設定預留讀寫輸送量,必須配置。
        'capacity_unit' => [
            'read' => <integer>, 
            'write' => <integer>
        ]
    ],
    'table_options' => [              //設定資料表配置資訊,必須配置。
        'time_to_live' => <integer>,   
        'max_versions' => <integer>,    
        'deviation_cell_version_in_sec' => <integer>  
    ],
    'stream_spec' => [
        'enable_stream' => true || false,
        'expiration_time' => <integer>
    ]
]);            

響應資訊

響應參數

返回為空白,出錯時會拋出異常。

結果格式

[]      

樣本

建立資料表時不帶索引

以下樣本用於同時建立資料表不帶索引。該表的主鍵為PK0(Integer類型)、PK1(String類型)和PK2(Binary類型),屬性列值最多保留2個版本資料以及資料永不到期。

$result = $client->createTable([
    'table_meta' => [
        //設定資料表名稱。
        'table_name' => 'SampleTable', 
        //為資料表添加主鍵列。
        'primary_key_schema' => [
            ['PK0', PrimaryKeyTypeConst::CONST_INTEGER], 
            ['PK1', PrimaryKeyTypeConst::CONST_STRING],
            ['PK2', PrimaryKeyTypeConst::CONST_BINARY]
        ]
    ], 
    'reserved_throughput' => [
        //設定預留讀寫輸送量,容量型執行個體中的資料表只能設定為0,高效能執行個體中的資料表可以設定為非零值。
        'capacity_unit' => [
            'read' => 0, 
            'write' => 0
        ]
    ],
    'table_options' => [
        //資料的到期時間,單位為秒,-1表示永不到期。帶索引表的資料表資料生命週期必須設定為-1。
        'time_to_live' => -1, 
        //儲存的最大版本數,1表示每列上最多儲存一個版本即儲存最新的版本。帶索引表的資料表最大版本數必須設定為1。  
        'max_versions' => 2,   
        //有效版本偏差,寫入資料的時間戳記與系統目前時間的偏差允許最大值。 
        'deviation_cell_version_in_sec' => 86400  
    ],
    'stream_spec' => [
        //開啟Stream。 
        'enable_stream' => true,
        //Stream資料的到期時間。 
        'expiration_time' => 24
    ]
]);   

建立資料表時配置全域二級索引

以下樣本用於同時建立資料表和全域二級索引。該表的主鍵為PK0(Integer類型)和PK1(String類型)且包括col1(String類型)和col2(Integer類型)兩個預定義列,屬性列值只保留最新版本資料以及資料永不到期。該全域二級索引"indexName1"的主鍵列為col1、PK0和PK1,屬性列為col2。全域二級索引"indexName2"的主鍵列為PK1、PK0,屬性列為col1、col2。

$request = array (
    'table_meta' => array (
        //設定資料表名稱。
        'table_name' => 'SampleTable',
        //為資料表添加主鍵列。
        'primary_key_schema' => array (
            array('PK0', PrimaryKeyTypeConst::CONST_INTEGER),
            array('PK1', PrimaryKeyTypeConst::CONST_STRING)
        ),
        //為資料表添加非主鍵列。 
        'defined_column' => array(
            array('col1', DefinedColumnTypeConst::DCT_STRING),
            array('col2', DefinedColumnTypeConst::DCT_INTEGER)
        )
    ),
    'reserved_throughput' => array (
        //設定預留讀寫輸送量,容量型執行個體中的資料表只能設定為0,高效能執行個體中的資料表可以設定為非零值。
        'capacity_unit' => array (
            'read' => 0,
            'write' => 0
        )
    ),
   'table_options' => [
        //資料的到期時間,單位為秒,-1表示永不到期。帶索引表的資料表資料生命週期必須設定為-1。
        'time_to_live' => -1, 
        //儲存的最大版本數,1表示每列上最多儲存一個版本即儲存最新的版本。帶索引表的資料表最大版本數必須設定為1。  
        'max_versions' => 1,   
        //有效版本偏差,寫入資料的時間戳記與系統目前時間的偏差允許最大值。 
        'deviation_cell_version_in_sec' => 86400  
    ],
    'index_metas' => array(
        array(
            //設定索引表名稱。
            'name' => 'indexName1',
            //設定索引表的索引列,索引列為資料表主鍵和預定義列的任意組合。 
            'primary_key' => array('col1'),
            //索引表的屬性列,索引表屬性列為資料表的預定義列的組合。
            'defined_column' => array('col2'),
            //設定索引類型為全域二級索引。 
            'index_type' => IndexTypeConst::GLOBAL_INDEX,
            //設定索引更新模式為非同步更新。 
            'index_update_mode' => IndexUpdateModeConst::ASYNC_INDEX
        ),
        array(
            'name' => 'indexName2',
            'primary_key' => array('PK1'),
            'defined_column' => array('col1', 'col2')
        )
    )
);
//調用建立表方法。 
$result = $client->createTable($request);

建立資料表時配置本地二級索引

以下樣本用於同時建立資料表和本地二級索引。該表的主鍵為PK0(Integer類型)和PK1(String類型)且包括col1(String類型)和col2(Integer類型)兩個預定義列,屬性列值只保留最新版本資料以及資料永不到期。該本地二級索引"indexName3"的主鍵列為PK0、col1和PK2,屬性列為col2。本地二級索引"indexName4"的主鍵為PK0、col2和PK1,屬性列為col1。

$request = array (
    'table_meta' => array (
        //設定資料表名稱。
        'table_name' => 'SampleTable', 
        //為資料表添加主鍵列。
        'primary_key_schema' => array (
            array('PK0', PrimaryKeyTypeConst::CONST_INTEGER),
            array('PK1', PrimaryKeyTypeConst::CONST_STRING)
        ),
        //為資料表添加非主鍵列。 
        'defined_column' => array(
            array('col1', DefinedColumnTypeConst::DCT_STRING),
            array('col2', DefinedColumnTypeConst::DCT_INTEGER)
        )
    ),
    //設定預留讀寫輸送量,容量型執行個體中的資料表只能設定為0,高效能執行個體中的資料表可以設定為非零值。
    'reserved_throughput' => array (
        'capacity_unit' => array (
            'read' => 0,
            'write' => 0
        )
    ),
    'table_options' => array(
        //資料的到期時間,單位為秒,-1表示永不到期。帶索引表的資料表資料生命週期必須設定為-1。
        'time_to_live' => -1,   
        //儲存的最大版本數,1表示每列上最多儲存一個版本即儲存最新的版本。帶索引表的資料表最大版本數必須設定為1。  
        'max_versions' => 1,  
        //寫入資料的時間戳記與系統目前時間的偏差允許最大值。 
        'deviation_cell_version_in_sec' => 86400  
    ),
    'index_metas' => array(
        array(
             //設定索引表名稱。
            'name' => 'indexName3',
            //設定索引表的索引列,索引列為資料表主鍵和預定義列的任意組合。 
            'primary_key' => array('PK0', 'col1'),
            //索引表的屬性列,索引表屬性列為資料表的預定義列的組合。
            'defined_column' => array('col2'),
            //設定索引類型為本地二級索引。 
            'index_type' => IndexTypeConst::LOCAL_INDEX,
            //設定索引更新模式為非同步更新。 
            'index_update_mode' => IndexUpdateModeConst::SYNC_INDEX
        ),
        array(
            'name' => 'indexName4',
            'primary_key' => array('PK0', 'col2'),
            'defined_column' => array('col1'),
            'index_type' => IndexTypeConst::LOCAL_INDEX,
            'index_update_mode' => IndexUpdateModeConst::SYNC_INDEX
        )
    )
);
//調用建立表方法。 
$result = $client->createTable($request);

相關文檔

  • 關於API說明的更多資訊,請參見CreateTable

  • 如果要讀寫表中資料,您可以通過調用讀寫資料介面實現。具體操作,請參見基礎資料操作

  • 如果要修改表的資料生命週期、最大版本數等資訊,您可以通過更新表實現。具體操作,請參見更新資料表

  • 為資料表開啟局部事務後,您可以建立局部事務用於讀寫局部事務範圍內的資料。具體操作,請參見局部事務

  • 如果要查看執行個體中已存在的所有表,您可以通過列出表名稱來實現。具體操作,請參見列出表名稱

  • 如果要查看錶的最大版本數、資料生命週期等配置資訊,您可以通過查看錶描述資訊實現。具體操作,請參見查詢表描述資訊

  • 如果不再使用資料表,您可以刪除資料表。具體操作,請參見刪除資料表