全部产品
Search
文档中心

表格存储:创建数据表

更新时间:Jun 19, 2025

本文介绍如何通过PHP SDK创建表格存储的数据表。

注意事项

创建数据表后,请等待数据表加载完成后再进行数据操作,否则数据操作会失败,这个过程通常需要几秒钟。

前提条件

初始化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.";
}

相关文档