建立資料表

更新時間:
Copy as MD

通過 Python SDK建立Table Store資料表,按需配置表結構、表選項、二級索引和資料加密。

使用說明

建立資料表後,需等待資料表載入完成再進行資料操作,否則操作會失敗。載入過程通常需要幾秒鐘。

前提條件

初始化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)

相關文檔