全部產品
Search
文件中心

Tablestore:建立資料表

更新時間:Nov 13, 2024

本文將通過參數說明和範例程式碼為您介紹如何使用 Python SDK 建立資料表。在建立資料表時,您需要指定資料表的結構資訊和配置資訊。高效能型執行個體中的資料表還可以根據需要設定預留讀寫輸送量。

注意事項

  • 建立資料表後需要幾秒鐘進行載入,在此期間對該資料表的讀寫資料操作均會失敗。請等待資料表載入完畢後再進行資料操作。

  • 如果您有主鍵資料自增的需求,例如電商網站的商品 ID、論壇文章的 ID 等情境,可以在建立資料時配置主鍵列自增。具體操作,請參見主鍵列自增

前提條件

介面

"""
說明:根據指定表結構資訊建立資料表。
當建立一個資料表後,通常需要等待幾秒鐘時間使partition load完成,才能進行各種操作。
返回:無。
"""
def create_table(self, table_meta, table_options, reserved_throughput, secondary_indexes=[])

參數說明

參數

說明

table_meta(必選

資料表的結構資訊,包括如下內容:

  • table_name(必選):資料表名稱。

  • schema_of_primary_key(必選):資料表的主鍵定義。更多資訊,請參見核心組件

    • 主鍵資料類型可以為 STRING、INTEGER 或 BINARY。

    • 可以設定 1~4 個主鍵列。Table Store將按照設定的順序產生主鍵,預設按升序進行排序。

    • 第一個主鍵列將作為分區鍵。

  • defined_columns(可選):預定義列資訊。資料類型可以為 STRING、INTEGER、BINARY、DOUBLE 或 BOOLEAN。

    說明
    • 預定義列是預先定義的一些非主鍵列,通常被用作二級索引的主鍵列或預定義列,以實現快速查詢資料的需求。

    • 屬性列在建立表時無需定義,您可以在寫入資料時為每行資料指定不同的屬性列和列名。

table_options(必選

資料表的配置資訊,包括如下內容:

  • time_to_live(可選):資料生命週期,即資料的到期時間,單位為秒。當資料的儲存時間超過設定的資料生命週期時,系統會自動清理超過資料生命週期的資料。

    預設值為 -1(表示資料永不到期)。資料生命週期的取值最低為 86400 秒(一天),也可設定為 -1(永不到期)。

    重要

    如果要使用多元索引或二級索引,必須將資料生命週期設定為 -1,或者將 allow_update 參數設定為 false。

  • max_version(可選):最大版本數,即屬性列能夠保留資料的最大版本個數。

    預設值為 1,表示每列上最多儲存一個版本,即儲存最新的版本。

    重要

    如果要使用多元索引或二級索引,最大版本數必須設定為 1。

  • max_time_deviation(可選):有效版本偏差,即寫入資料的時間戳記與系統目前時間的偏差允許最大值,單位為秒。

    預設值 86400 秒(一天)。屬性列的有效取值範圍是一個左閉右開的區間:[max{資料寫入時間-有效版本偏差,資料寫入時間-資料生命週期},資料寫入時間+有效版本偏差)

  • allow_update(可選):是否允許更新。預設為true。

    重要

    如果要使用多元索引的生命週期功能,必須設定此參數為 false。如果您需要更新資料,可使用 PutRow 介面寫入資料。

secondary_indexes(可選)

索引列表。每個索引包含以下內容:

  • index_name(必選):索引名稱。

  • primary_key_names(必選):索引的主鍵列。可以由資料表的主鍵列和預定義列組成。

    重要

    使用本地二級索引時,索引第一個主鍵列必須是資料表的第一個主鍵列。

  • defined_column_names(可選):索引的預定義列。可以由資料表的預定義列組成。

  • index_type(可選):索引類型。取值範圍如下:

    • GLOBAL_INDEX (預設值):全域二級索引。

    • LOCAL_INDEX:本地二級索引。

reserved_throughput(必選

預留讀寫輸送量,單位為 CU。預設值為 0。

重要

僅高效能型執行個體支援設定資料表的預留讀寫輸送量為非零值。

樣本

建立資料表

以下樣本用於建立資料表。

# 建立資料表主鍵列的schema,包括主鍵的個數、名稱和類型。
# 第一個主鍵列為整型,名稱是pk0,該列同時也是分區鍵。
# 第二個主鍵列為整型,名稱是pk1。其他可選的類型包括STRING和BINARY,此處使用INTEGER。
schema_of_primary_key = [('pk0', 'INTEGER'), ('pk1', 'INTEGER')]

# 通過資料表名稱和主鍵列的schema建立一個tableMeta。
table_meta = TableMeta('<table_name>', schema_of_primary_key)

# 建立TableOptions,資料保留時間為31536000秒,資料超過保留時間後Table Store會自動刪除超期資料,最大儲存3個版本,寫入時指定的版本值和目前時間相差不能超過86400秒(即1天)。
table_options = TableOptions(31536000, 3, 86400)

# 設定預留讀輸送量為0,預留寫輸送量為0。
reserved_throughput = ReservedThroughput(CapacityUnit(0, 0))

# 調用client的create_table介面,如果沒有拋出異常,則說明執行成功。
try:
    ots_client.create_table(table_meta, table_options, reserved_throughput)
    print("create table succeeded.")
# 如果拋出異常,則說明執行失敗,處理異常。
except Exception:
    print("create table failed.")

建立資料表時配置二級索引

建立資料表時配置全域二級索引

以下樣本用於同時建立資料表和全域二級索引。

# 建立資料表主鍵列的schema,包括主鍵的個數、名稱和類型。
schema_of_primary_key = [('gid', 'INTEGER'), ('uid', 'STRING')]

# 配置資料表的預定義列。
defined_columns = [('i', 'INTEGER'), ('bool', 'BOOLEAN'), ('d', 'DOUBLE'), ('s', 'STRING'), ('b', 'BINARY')]

# 通過資料表名稱和主鍵列的schema建立一個tableMeta。
table_meta = TableMeta('<table_name>', schema_of_primary_key, defined_columns)

# 建立TableOptions,資料永不到期,只儲存1個版本資料。
table_option = TableOptions(-1, 1)

# 設定預留讀輸送量為0,預留寫輸送量為0。
reserved_throughput = ReservedThroughput(CapacityUnit(0, 0))

# 設定二級索引的索引名稱、主鍵列和屬性列。索引類型預設為全域二級索引。
secondary_indexes = [
    SecondaryIndexMeta('index1', ['i', 's'], ['bool', 'b', 'd']),
]

# 調用client的create_table介面,如果沒有拋出異常,則說明執行成功。
ots_client.create_table(table_meta, table_option, reserved_throughput, secondary_indexes)

建立資料表時配置本地二級索引

以下樣本用於同時建立資料表和本地二級索引。

# 建立資料表主鍵列的schema,包括主鍵的個數、名稱和類型。
schema_of_primary_key = [('gid', 'INTEGER'), ('uid', 'STRING')]

# 配置資料表的預定義列。
defined_columns = [('i', 'INTEGER'), ('bool', 'BOOLEAN'), ('d', 'DOUBLE'), ('s', 'STRING'), ('b', 'BINARY')]

# 通過資料表名稱和主鍵列的schema建立一個tableMeta。
table_meta = TableMeta('<table_name>', schema_of_primary_key, defined_columns)

# 建立TableOptions,資料永不到期,只儲存1個版本資料。
table_option = TableOptions(-1, 1)

# 設定預留讀輸送量為0,預留寫輸送量為0。
reserved_throughput = ReservedThroughput(CapacityUnit(0, 0))

# 設定二級索引的索引名稱、主鍵列、索引列和索引類型。其中設定索引類型為本地二級索引。
secondary_indexes = [
    SecondaryIndexMeta('index1', ['gid', 's'], ['bool', 'b', 'd'],index_type= SecondaryIndexType.LOCAL_INDEX),
]

# 調用client的create_table介面,如果沒有拋出異常,則說明執行成功。
ots_client.create_table(table_meta, table_option, reserved_throughput, secondary_indexes)                    

相關文檔