创建数据表

更新时间:
复制为 MD 格式

通过 Python SDK创建表格存储数据表,按需配置表结构、表选项、二级索引和数据加密。

使用说明

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

前提条件

初始化Tablestore Client

方法说明

def create_table(self, table_meta, table_options, reserved_throughput, secondary_indexes=[], sse_spec)

参数说明

  • table_meta(必选)TableMeta:表结构信息,包含以下参数。

    名称

    类型

    说明

    table_name(必选)

    str

    数据表名称。

    schema_of_primary_key(必选)

    List[Tuple]

    主键配置。

    • 支持设置 1~4 个主键列,默认按升序排序,第一个主键列为分区键。

    • 主键列支持 STRING、INTEGER 和 BINARY 类型。非分区键的 INTEGER 类型主键列可设置自增主键

    defined_columns(可选)

    List[Tuple]

    预定义列配置。

    • 预定义列是在创建数据表时预先定义的属性列,可用于创建二级索引多元索引

    • 预定义列支持 STRING、INTEGER、BINARY、DOUBLE 和 BOOLEAN 类型。

  • table_options(必选)TableOptions:表配置信息,包含以下参数。

    名称

    类型

    说明

    time_to_live(可选)

    int

    数据生命周期,单位为秒,默认值为 -1

    • 设置为 -1 时数据永不过期;否则最小值为 86400(1 天),超出生命周期的数据将被自动清除。

    • 使用多元索引或二级索引时,必须将此参数设置为 -1,或将 allow_update 设置为 False。

    max_version(可选)

    int

    最大版本数,默认值为 1

    • 使用多元索引或二级索引时,必须将此参数设置为 1

    max_time_deviation(可选)

    int

    有效版本偏差,单位为秒,默认值为 86400(1 天)。

    • 写入数据的时间戳与系统当前时间的差值必须在有效版本偏差范围内,否则写入失败。

    • 属性列数据的有效版本范围为 [max(数据写入时间-有效版本偏差, 数据写入时间-数据生命周期), 数据写入时间+有效版本偏差)

    allow_update(可选)

    bool

    是否允许更新,默认值为 True

    • 设置为 False 时,无法通过 update_row() 方法更新数据。

  • secondary_indexes(可选)List[SecondaryIndexMeta]:二级索引列表,每个索引包含以下参数。

    名称

    类型

    说明

    index_name(必选)

    str

    索引名称。

    primary_key_names(必选)

    List[str]

    索引的主键列,可由数据表的主键列和预定义列组成。

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

    defined_column_names(可选)

    List[str]

    索引包含的预定义列,必须为数据表中已定义的预定义列。

    index_type(可选)

    SecondaryIndexType

    索引类型,取值如下。

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

    • LOCAL_INDEX:本地二级索引。

  • reserved_throughput(必选)ReservedThroughput预留读写吞吐量,单位为 CU,默认值为 0。仅 CU 模式的高性能实例支持设置为非零值。

  • sse_spec(可选)SSESpecification数据加密数据加密配置,包含以下参数。

    重要

    数据加密只能在创建数据表时开启,创建完成后无法关闭。此功能需要 Python SDK 6.4.0 及以上版本。

    名称

    类型

    说明

    enable(必选)

    boolean

    是否开启数据加密,默认值为 False

    key_type(可选)

    SSEKeyType

    加密类型,SSEKeyType 取值如下。

    • SSE_KMS_SERVICE:KMS 加密。

    • SSE_BYOK:BYOK 加密。

    key_id(可选)

    str

    用户主密钥 ID。仅当 key_typeSSE_BYOK 时需设置。

    role_arn(可选)

    str

    RAM 角色 ARN。仅当 key_typeSSE_BYOK 时需设置。

示例代码

以下示例创建了一张名为 test_table 的数据表,包含 1 个 STRING 类型的主键列。

# 数据表至少需要 1 个主键列
schema_of_primary_key = [('id', 'STRING')]
# 构造表结构信息
table_meta = TableMeta('test_table', schema_of_primary_key)

# 构造表配置信息
table_options = TableOptions(time_to_live=-1, max_version=1, max_time_deviation=86400, allow_update=True)

# 设置预留读写吞吐量,默认为 0 CU
# 仅 CU 模式的高性能实例支持设置为非零值
reserved_throughput = ReservedThroughput(CapacityUnit(0,0))

try:
    client.create_table(table_meta, table_options, reserved_throughput)
    print("Create table succeeded.")
except Exception as e:
    print("Create table failed. %s" % e)

创建数据表时还可以进行以下可选配置。

  • 添加预定义列

    defined_columns = [('name', 'STRING')]
    # 将预定义列加入表结构信息
    table_meta = TableMeta('test_table', schema_of_primary_key, defined_columns)
  • 添加二级索引

    # 构造二级索引列表
    secondary_indexes = [
        # 设置索引名称、索引主键列、索引预定义列、索引类型
        SecondaryIndexMeta('test_table_index', ['id', 'name'], [], index_type= SecondaryIndexType.LOCAL_INDEX)
    ]
    client.create_table(table_meta, table_options, reserved_throughput, secondary_indexes)
  • 设置数据加密

    通过SSESpecification类配置数据表的服务端加密(SSE)。

    • KMS 加密

      sse_specification = SSESpecification(enable=True, key_type=SSEKeyType.SSE_KMS_SERVICE, key_id=None,
                                                   role_arn=None)
      client.create_table(table_meta, table_option, reserved_throughput, sse_spec=sse_specification)
    • BYOK 加密

      说明

      运行代码前需获取用户主密钥IDRAM角色 ARN,具体操作请参见BYOK加密

      key_id = "key-hzz6*****************"
      role_arn = "acs:ram::1705************:role/tabletorebyok"
      sse_specification = SSESpecification(enable=True, key_type=SSEKeyType.SSE_BYOK, key_id=key_id,
                                                   role_arn=role_arn)
      client.create_table(table_meta, table_option, reserved_throughput, sse_spec=sse_specification)

相关文档