使用 Python SDK 建立資料表,並按需配置表結構、表配置、二級索引和資料加密。
前提條件
安裝Tablestore Python SDK並初始化用戶端。
功能說明
調用 create_table 方法建立資料表。
def create_table(
self,
table_meta,
table_options,
reserved_throughput,
secondary_indexes=None,
sse_spec=None,
)
以下樣本建立主鍵列為 id 的 example_table 資料表。表中資料永不到期,每個屬性列最多保留一個版本。
table_meta = TableMeta(
"example_table",
[("id", "STRING")],
)
table_options = TableOptions(
time_to_live=-1,
max_version=1,
max_time_deviation=86400,
allow_update=True,
)
reserved_throughput = ReservedThroughput(CapacityUnit(0, 0))
client.create_table(table_meta, table_options, reserved_throughput)
建立資料表後,需等待資料表載入完成再進行資料操作。載入過程通常需要幾秒鐘。
參數說明
create_table 方法包含以下參數。
|
名稱 |
類型 |
說明 |
|
table_meta(必選) |
|
表結構。 |
|
table_options(必選) |
|
表配置。 |
|
reserved_throughput(必選) |
|
預留讀寫輸送量。 |
|
secondary_indexes(可選) |
|
隨資料表建立的二級索引列表。 |
|
sse_spec(可選) |
|
服務端加密配置。資料加密只能在建立資料表時開啟,建立後無法關閉。此功能需要 Python SDK 6.4.0 及以上版本。 |
表結構
table_meta 的類型為 TableMeta,包含以下參數。
|
名稱 |
類型 |
說明 |
|
table_name(必選) |
|
資料表名稱。 |
|
schema_of_primary_key(必選) |
|
主鍵配置。可設定 1~4 個主鍵列,第一個主鍵列為分區鍵。主鍵列按升序排列,支援 |
|
defined_columns(可選) |
|
預定義列配置。預定義列支援 |
主鍵列
table_meta.schema_of_primary_key[] 使用元組配置一個主鍵列,包含以下元素。
|
名稱 |
類型 |
說明 |
|
name(必選) |
|
主鍵列名稱。 |
|
type(必選) |
|
主鍵列類型。取值為 |
|
option(可選) |
|
主鍵列選項。將非分區鍵的 |
預定義列
table_meta.defined_columns[] 使用元組配置一個預定義列,包含以下元素。
|
名稱 |
類型 |
說明 |
|
name(必選) |
|
預定義列名稱。 |
|
type(必選) |
|
預定義列類型。取值為 |
表配置
table_options 的類型為 TableOptions,包含以下參數。
|
名稱 |
類型 |
說明 |
|
time_to_live(可選) |
|
資料生命週期,單位為秒,預設值為 |
|
max_version(可選) |
|
每個屬性列最多保留的版本數,預設值為 |
|
max_time_deviation(可選) |
|
有效版本偏差,單位為秒,預設值為 |
|
allow_update(可選) |
|
是否允許通過 |
預留讀寫輸送量
reserved_throughput 的類型為 ReservedThroughput,包含以下參數。
|
名稱 |
類型 |
說明 |
|
capacity_unit(必選) |
|
預留讀寫輸送量,單位為 CU。預設讀 CU 和寫 CU 均為 |
容量單元
reserved_throughput.capacity_unit 的類型為 CapacityUnit,包含以下參數。
|
名稱 |
類型 |
說明 |
|
read(可選) |
|
預留讀輸送量,單位為 CU,預設值為 |
|
write(可選) |
|
預留寫輸送量,單位為 CU,預設值為 |
二級索引
secondary_indexes[] 的類型為 SecondaryIndexMeta,包含以下參數。
|
名稱 |
類型 |
說明 |
|
index_name(必選) |
|
索引名稱。 |
|
primary_key_names(必選) |
|
索引主鍵列,可由資料表的主鍵列和預定義列組成。本地二級索引的第一個主鍵列必須與資料表的第一個主鍵列相同。 |
|
defined_column_names(可選) |
|
索引包含的預定義列,必須是資料表中已定義的預定義列。 |
|
index_type(可選) |
|
索引類型。取值為 |
服務端加密配置
sse_spec 的類型為 SSESpecification,包含以下參數。
|
名稱 |
類型 |
說明 |
|
enable(可選) |
|
是否開啟資料加密,預設值為 |
|
key_type(可選) |
|
加密類型。取值為 |
|
key_id(可選) |
|
使用者主要金鑰 ID。使用 BYOK 加密時必須設定。 |
|
role_arn(可選) |
|
RAM 角色 ARN。使用 BYOK 加密時必須設定。 |
情境樣本
配置表結構和資料版本
以下樣本為資料表添加 name 預定義列,並將每個屬性列最多保留的版本數設定為 3。
table_meta = TableMeta(
"example_table",
[("id", "STRING")],
[("name", "STRING")],
)
table_options = TableOptions(
time_to_live=-1,
max_version=3,
max_time_deviation=86400,
allow_update=True,
)
reserved_throughput = ReservedThroughput(CapacityUnit(0, 0))
client.create_table(table_meta, table_options, reserved_throughput)
建立資料表時添加二級索引
以下樣本建立資料表時一併建立本地二級索引。資料表和二級索引的第一個主鍵列均為 id。
table_meta = TableMeta(
"example_table",
[("id", "STRING"), ("device_id", "INTEGER")],
[("status", "STRING")],
)
table_options = TableOptions(time_to_live=-1, max_version=1)
reserved_throughput = ReservedThroughput(CapacityUnit(0, 0))
secondary_indexes = [
SecondaryIndexMeta(
"example_local_index",
["id", "device_id"],
["status"],
index_type=SecondaryIndexType.LOCAL_INDEX,
)
]
client.create_table(
table_meta,
table_options,
reserved_throughput,
secondary_indexes=secondary_indexes,
)
加密資料表
以下樣本分別使用 KMS 服務密鑰和 BYOK 加密資料表。
資料加密只能在建立資料表時開啟,建立完成後無法關閉。
KMS 服務祕密金鑰加密
sse_spec = SSESpecification(
enable=True,
key_type=SSEKeyType.SSE_KMS_SERVICE,
)
client.create_table(
table_meta,
table_options,
reserved_throughput,
sse_spec=sse_spec,
)
BYOK 加密
如需使用 BYOK 加密,請先擷取使用者主要金鑰 ID 和 RAM 角色 ARN。具體操作,請參見資料加密。
sse_spec = SSESpecification(
enable=True,
key_type=SSEKeyType.SSE_BYOK,
key_id="key-example",
role_arn="acs:ram::1234567890123456:role/example-role",
)
client.create_table(
table_meta,
table_options,
reserved_throughput,
sse_spec=sse_spec,
)