全部产品
Search
文档中心

表格存储:创建数据表

更新时间:Nov 12, 2024

本文将通过参数说明和示例代码为您介绍如何使用 PHP SDK 创建数据表。在创建数据表时,您需要指定数据表的结构信息和配置信息。高性能型实例中的数据表还可以根据需要设置预留读写吞吐量。

注意事项

  • 创建数据表后需要几秒钟进行加载,在此期间对该数据表的读写数据操作均会失败。请等待数据表加载完毕后再进行数据操作。

  • 如果您有主键数据自增的需求,例如电商网站的商品 ID、论坛帖子的 ID 等场景,可以在创建数据时配置主键列自增。具体操作,请参见主键列自增

前提条件

接口

/**
 * 根据指定表结构信息创建数据表。
 * 当创建一个数据表后,通常需要等待几秒钟时间使partition load完成,才能进行各种操作。
 * @param [] $request 请求参数。
 * @return [] 返回为空。
 * @throws OTSClientException 当参数检查出错或服务端返回校验出错时抛出异常。
 * @throws OTSServerException 当OTS服务端返回错误时抛出异常。
 */
public function createTable(array $request);           

参数说明

request包含以下参数:

参数

说明

table_meta(必选

数据表的结构信息,包括如下内容:

  • table_name(必选):数据表名称。

  • primary_key_schema(必选):数据表的主键定义。更多信息,请参见核心组件

    • 主键数据类型可以为 STRING、INTEGER 或 BINARY。

    • 可以设置 1~4 个主键列。表格存储将按照设置的顺序生成主键,默认按升序进行排序。

    • 第一个主键列将作为分区键。

  • defined_column(可选):预定义列信息。数据类型可以为 STRING、INTEGER、BLOB、DOUBLE 或 BOOLEAN。

    说明
    • 预定义列是预先定义的一些非主键列,通常被用作二级索引的主键列或预定义列,以实现快速查询数据的需求。

    • 属性列在创建表时无需定义,您可以在写入数据时为每行数据指定不同的属性列和列名。

table_options(必选

数据表的配置信息,包括如下内容:

  • time_to_live(必选):数据生命周期,即数据的过期时间,单位为秒。

    数据生命周期的取值最低为 86400 秒(一天),也可设置为 -1(永不过期)。

    重要

    如果要使用多元索引或二级索引,必须将数据生命周期设置为 -1,或者将 allow_update 参数设置为 false。

  • max_versions(必选):最大版本数,即属性列能够保留数据的最大版本个数。

    重要

    如果要使用多元索引或二级索引,最大版本数必须设置为 1。

  • deviation_cell_version_in_sec(必选):有效版本偏差,即写入数据的时间戳与系统当前时间的偏差允许最大值,单位为秒。

    属性列的有效取值范围是一个左闭右开的区间:[max{数据写入时间-有效版本偏差,数据写入时间-数据生命周期},数据写入时间+有效版本偏差)

  • allow_update(可选):是否允许更新。默认为true。

    重要

    如果要使用多元索引的生命周期功能,必须设置此参数为 false。如果您需要更新数据,可使用 PutRow 接口写入数据。

index_metas(可选)

索引列表。每个索引包含以下内容:

  • name(必选):索引名称。

  • primary_key(必选):索引的主键列。可以由数据表的主键列和预定义列组成。

    重要

    使用本地二级索引时,索引第一个主键列必须是数据表的第一个主键列。

  • defined_column(必选):索引的预定义列。可以由数据表的预定义列组成。

  • index_type(可选):索引类型。取值范围如下:

    • GLOBAL_INDEX(默认值):全局二级索引。

    • LOCAL_INDEX:本地二级索引。

  • index_update_mode(可选):索引更新模式。取值范围如下:

    • ASYNC_INDEX(默认值):异步更新。

      说明

      使用全局二级索引时,索引更新模式必须设置为异步更新。

    • SYNC_INDEX:同步更新。

      说明

      使用本地二级索引时,索引更新模式必须设置为同步更新。

reserved_throughput(必选

预留读写吞吐量,单位为 CU。默认值为 0。

重要

仅高性能型实例支持设置数据表的预留读写吞吐量为非零值。

stream_spec(可选)

数据表的 Stream 配置信息,包括如下内容:

  • enable_stream(可选):是否开启 stream。默认值为 false,即不开启 stream。

  • expiration_time(可选):stream 过期时间,表示增量日志过期时长。单位为小时,最大值为 168 小时(7 天)。

    说明

    开启 stream 时,必须设置 expirationTime 参数。

示例

创建数据表

以下示例用于创建数据表。

$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);

相关文档