本文將通過參數說明和範例程式碼為您介紹如何使用 PHP SDK 建立資料表。在建立資料表時,您需要指定資料表的結構資訊和配置資訊。高效能型執行個體中的資料表還可以根據需要設定預留讀寫輸送量。
注意事項
建立資料表後需要幾秒鐘進行載入,在此期間對該資料表的讀寫資料操作均會失敗。請等待資料表載入完畢後再進行資料操作。
如果您有主鍵資料自增的需求,例如電商網站的商品 ID、論壇文章的 ID 等情境,可以在建立資料時配置主鍵列自增。具體操作,請參見主鍵列自增。
前提條件
已通過控制台建立執行個體。具體操作,請參見建立執行個體。
已初始化 OTSClient。具體操作,請參見初始化 OTSClient。
介面
/**
* 根據指定表結構資訊建立資料表。
* 當建立一個資料表後,通常需要等待幾秒鐘時間使partition load完成,才能進行各種操作。
* @param [] $request 請求參數。
* @return [] 返回為空白。
* @throws OTSClientException 當參數檢查出錯或服務端返回校正出錯時拋出異常。
* @throws OTSServerException 當OTS服務端返回錯誤時拋出異常。
*/
public function createTable(array $request);
參數說明
request
包含以下參數:
參數 | 說明 |
table_meta(必選) | 資料表的結構資訊,包括如下內容:
|
table_options(必選) | 資料表的配置資訊,包括如下內容:
|
index_metas(可選) | 索引列表。每個索引包含以下內容:
|
reserved_throughput(必選) | 預留讀寫輸送量,單位為 CU。預設值為 0。 重要 僅高效能型執行個體支援設定資料表的預留讀寫輸送量為非零值。 |
stream_spec(可選) | 資料表的 Stream 配置資訊,包括如下內容:
|
樣本
建立資料表
以下樣本用於建立資料表。
$result = $client->createTable([
'table_meta' => [
//設定資料表名稱。
'table_name' => '<TABLE_NAME>',
//設定資料表主鍵列。主鍵為pk1(String類型)和pk2(Integer類型),其中pk1主鍵列為分區鍵,pk2主鍵列為自增列。
'primary_key_schema' => [
['pk1', PrimaryKeyTypeConst::CONST_STRING],
['pk2', PrimaryKeyTypeConst::CONST_INTEGER, PrimaryKeyOptionConst::CONST_PK_AUTO_INCR]
]
],
'table_options' => [
//資料的到期時間,-1表示永不到期。
'time_to_live' => -1,
//最大版本數,屬性列值最多保留1個版本,即儲存最新的版本。
'max_versions' => 1,
//有效版本偏差,寫入資料的時間戳記與系統目前時間的偏差不能超過86400秒(即1天)。
'deviation_cell_version_in_sec' => 86400
],
'reserved_throughput' => [
//設定預留讀寫輸送量,容量型執行個體中的資料表只能設定為0,高效能型執行個體中的資料表可以設定為非零值。
'capacity_unit' => [
'read' => 0,
'write' => 0
]
]
]);
建立資料表時配置二級索引
建立資料表時配置全域二級索引
以下樣本用於同時建立資料表和全域二級索引。
$request = array (
'table_meta' => array (
//設定資料表名稱。
'table_name' => '<TABLE_NAME>',
//設定資料表主鍵列。主鍵為pk1(String類型)和pk2(Integer類型)。
'primary_key_schema' => array (
array('pk1', PrimaryKeyTypeConst::CONST_STRING),
array('pk2', PrimaryKeyTypeConst::CONST_INTEGER)
),
//設定資料表預定義列。預定義列為defcol1(String類型)和defcol2(Integer類型)。
'defined_column' => array(
array('defcol1', DefinedColumnTypeConst::DCT_STRING),
array('defcol2', DefinedColumnTypeConst::DCT_INTEGER)
)
),
'table_options' => [
//資料的到期時間,-1表示永不到期。
'time_to_live' => -1,
//最大版本數,屬性列值最多保留1個版本,即儲存最新的版本。
'max_versions' => 1,
//有效版本偏差,寫入資料的時間戳記與系統目前時間的偏差不能超過86400秒(即1天)。
'deviation_cell_version_in_sec' => 86400
],
'reserved_throughput' => array (
//設定預留讀寫輸送量,容量型執行個體中的資料表只能設定為0,高效能型執行個體中的資料表可以設定為非零值。
'capacity_unit' => array (
'read' => 0,
'write' => 0
)
),
'index_metas' => array(
array(
//設定索引名稱。
'name' => '<INDEX_NAME>',
//為索引添加主鍵。主鍵列為defcol1、pk1和pk2。
'primary_key' => array('defcol1', 'pk1', 'pk2'),
//為索引添加預定義列。預定義列為defcol2。
'defined_column' => array('defcol2'),
//設定索引類型為全域二級索引。
'index_type' => IndexTypeConst::GLOBAL_INDEX,
//設定索引更新模式為非同步更新。
'index_update_mode' => IndexUpdateModeConst::ASYNC_INDEX
),
)
);
//調用建立表方法。
$result = $client->createTable($request);
建立資料表時配置本地二級索引
以下樣本用於同時建立資料表和本地二級索引。
$request = array (
'table_meta' => array (
//設定資料表名稱。
'table_name' => '<TABLE_NAME>',
//設定資料表主鍵列。主鍵為pk1(String類型)和pk2(Integer類型)。
'primary_key_schema' => array (
array('pk1', PrimaryKeyTypeConst::CONST_STRING),
array('pk2', PrimaryKeyTypeConst::CONST_INTEGER)
),
//設定資料表預定義列。預定義列為defcol1(String類型)和defcol2(Integer類型)。
'defined_column' => array(
array('defcol1', DefinedColumnTypeConst::DCT_STRING),
array('defcol2', DefinedColumnTypeConst::DCT_INTEGER)
)
),
'table_options' => [
//資料的到期時間,-1表示永不到期。
'time_to_live' => -1,
//最大版本數,屬性列值最多保留1個版本,即儲存最新的版本。
'max_versions' => 1,
//有效版本偏差,寫入資料的時間戳記與系統目前時間的偏差不能超過86400秒(即1天)。
'deviation_cell_version_in_sec' => 86400
],
'reserved_throughput' => array (
//設定預留讀寫輸送量,容量型執行個體中的資料表只能設定為0,高效能型執行個體中的資料表可以設定為非零值。
'capacity_unit' => array (
'read' => 0,
'write' => 0
)
),
'index_metas' => array(
array(
//設定索引名稱。
'name' => '<INDEX_NAME>',
//為索引添加主鍵。主鍵列為pk1、defcol1和pk2。
'primary_key' => array('pk1', 'defcol1', 'pk2'),
//為索引添加預定義列。預定義列為defcol2。
'defined_column' => array('defcol2'),
//設定索引類型為本地二級索引。
'index_type' => IndexTypeConst::LOCAL_INDEX,
//設定索引更新模式為同步更新。
'index_update_mode' => IndexUpdateModeConst::SYNC_INDEX
),
)
);
//調用建立表方法。
$result = $client->createTable($request);