創(chuàng)建二級索引
二級索引相當(dāng)于把數(shù)據(jù)表的主鍵查詢能力擴(kuò)展到了不同的列,當(dāng)需要使用屬性查詢數(shù)據(jù)時(shí),您可以通過創(chuàng)建二級索引加快數(shù)據(jù)查詢的效率。設(shè)置預(yù)定義列后,在創(chuàng)建二級索引時(shí)將預(yù)定義列作為索引表的索引列或者屬性列。創(chuàng)建二級索引后,您可以使用二級索引進(jìn)行數(shù)據(jù)查詢。
二級索引包括全局二級索引和本地二級索引。關(guān)于二級索引的更多信息,請參見二級索引。
您也可以使用CreateTable接口在創(chuàng)建數(shù)據(jù)表的同時(shí)創(chuàng)建一個(gè)或者多個(gè)索引表。具體操作,請參見創(chuàng)建數(shù)據(jù)表。
前提條件
已初始化Client。具體操作,請參見初始化OTSClient。
已創(chuàng)建數(shù)據(jù)表,且數(shù)據(jù)表的最大版本數(shù)(max_version)必須為1,數(shù)據(jù)生命周期(time_to_live)必須滿足如下條件中的任意一個(gè)。具體操作,請參見創(chuàng)建數(shù)據(jù)表。
數(shù)據(jù)表的數(shù)據(jù)生命周期為-1(數(shù)據(jù)永不過期)。
數(shù)據(jù)表的數(shù)據(jù)生命周期不為-1時(shí),數(shù)據(jù)表為禁止更新狀態(tài)(即是否允許更新為否)。
數(shù)據(jù)表已設(shè)置預(yù)定義列。
注意事項(xiàng)
索引表名稱不能與已存在的時(shí)序表名稱和數(shù)據(jù)表名稱相同。
創(chuàng)建二級索引時(shí),系統(tǒng)會(huì)自動(dòng)將未出現(xiàn)在索引列中的數(shù)據(jù)表主鍵補(bǔ)齊到索引表主鍵中。
創(chuàng)建本地二級索引時(shí),索引表的第一列主鍵必須與數(shù)據(jù)表的第一列主鍵相同。
參數(shù)
參數(shù) | 說明 |
main_table_name | 數(shù)據(jù)表名稱。 |
index_meta | 索引表的結(jié)構(gòu)信息,包括如下內(nèi)容:
|
include_base_data | 索引表中是否包含數(shù)據(jù)表中已存在的數(shù)據(jù)。 當(dāng)設(shè)置include_base_data為True時(shí),表示包含存量數(shù)據(jù);當(dāng)設(shè)置include_base_data為False時(shí),表示不包含存量數(shù)據(jù)。 |
示例
創(chuàng)建全局二級索引
以下示例用于在主鍵為pk1、pk2的數(shù)據(jù)表上創(chuàng)建主鍵列為definedcol1、pk1,屬性列為definedcol2、definedcol3的索引表。
# 構(gòu)造索引Meta。
# 依次設(shè)置索引表名稱、索引表主鍵列和屬性列。
index_meta = SecondaryIndexMeta('<INDEX_NAME>', ['definedcol1', 'pk1'], ['definedcol2', 'definedcol3'])
# 設(shè)置數(shù)據(jù)表名稱,不包含存量數(shù)據(jù)。
client.create_secondary_index('<TABLE_NAME>', index_meta, False)
# 設(shè)置數(shù)據(jù)表名稱,包含存量數(shù)據(jù)。
# 創(chuàng)建索引表后會(huì)開啟數(shù)據(jù)表中存量數(shù)據(jù)的同步,然后可以通過索引表查詢?nèi)繑?shù)據(jù),同步時(shí)間和數(shù)據(jù)量的大小有一定的關(guān)系。
# client.create_secondary_index('<TABLE_NAME>', index_meta, True)
創(chuàng)建本地二級索引
以下示例用于在主鍵為pk1、pk2的數(shù)據(jù)表上創(chuàng)建主鍵列為pk1、definedcol1,屬性列為definedcol2、definedcol3的索引表。
# 構(gòu)造索引Meta。
# 依次設(shè)置索引表名稱、索引表主鍵列、索引表屬性列和索引類型。
# 本地二級索引的第一列主鍵必須和數(shù)據(jù)表的第一列主鍵相同。
index_meta = SecondaryIndexMeta('<INDEX_NAME>', ['pk1', 'definedcol1'], ['definedcol2', 'definedcol3'],index_type= SecondaryIndexType.LOCAL_INDEX)
# 設(shè)置數(shù)據(jù)表名稱,不包含存量數(shù)據(jù)
client.create_secondary_index('<TABLE_NAME>', index_meta, False)
# 設(shè)置數(shù)據(jù)表名稱,包含存量數(shù)據(jù)。
# 創(chuàng)建索引表后會(huì)開啟數(shù)據(jù)表中存量數(shù)據(jù)的同步,然后可以通過索引表查詢?nèi)繑?shù)據(jù),同步時(shí)間和數(shù)據(jù)量的大小有一定的關(guān)系。
# client.create_secondary_index('<TABLE_NAME>', index_meta, True)
相關(guān)文檔
創(chuàng)建二級索引后,您可以進(jìn)行單行讀取數(shù)據(jù)或范圍讀取數(shù)據(jù)操作。具體操作,請參見使用二級索引讀取數(shù)據(jù)。
如果不再需要使用二級索引,您可以刪除二級索引。具體操作,請參見刪除二級索引。