本文将通过参数说明和示例代码为您介绍如何使用 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);