二級索引相當於把資料表的主鍵查詢能力擴充到了不同的列,當需要使用屬性查詢資料時,您可以通過建立二級索引加快資料查詢的效率。設定預定義列後,在建立二級索引時將預定義列作為索引表的索引列或者屬性列。建立二級索引後,您可以使用二級索引進行資料查詢。
前提條件
已初始化Client。具體操作,請參見初始化OTSClient。
已建立資料表,且資料表的最大版本數(max_version)必須為1,資料生命週期(time_to_live)必須滿足如下條件中的任意一個。具體操作,請參見建立資料表。
資料表的資料生命週期為-1(資料永不到期)。
資料表的資料生命週期不為-1時,資料表為禁止更新狀態(即是否允許更新為否)。
資料表已設定預定義列。
注意事項
索引表名稱不能與已存在的時序表名稱和資料表名稱相同。
建立二級索引時,系統會自動將未出現在索引列中的資料表主鍵補齊到索引表主鍵中。
建立本地二級索引時,索引表的第一列主鍵必須與資料表的第一列主鍵相同。
參數
參數 | 說明 |
main_table_name | 資料表名稱。 |
index_meta | 索引表的結構資訊,包括如下內容:
|
include_base_data | 索引表中是否包含資料表中已存在的資料。 當設定include_base_data為True時,表示包含存量資料;當設定include_base_data為False時,表示不包含存量資料。 |
樣本
建立全域二級索引
以下樣本用於在主鍵為pk1、pk2的資料表上建立主鍵列為definedcol1、pk1,屬性列為definedcol2、definedcol3的索引表。
# 構造索引Meta。
# 依次設定索引表名稱、索引表主鍵列和屬性列。
index_meta = SecondaryIndexMeta('<INDEX_NAME>', ['definedcol1', 'pk1'], ['definedcol2', 'definedcol3'])
# 設定資料表名稱,不包含存量資料。
client.create_secondary_index('<TABLE_NAME>', index_meta, False)
# 設定資料表名稱,包含存量資料。
# 建立索引表後會開啟資料表中存量資料的同步,然後可以通過索引表查詢全部資料,同步時間和資料量的大小有一定的關係。
# client.create_secondary_index('<TABLE_NAME>', index_meta, True)
建立本地二級索引
以下樣本用於在主鍵為pk1、pk2的資料表上建立主鍵列為pk1、definedcol1,屬性列為definedcol2、definedcol3的索引表。
# 構造索引Meta。
# 依次設定索引表名稱、索引表主鍵列、索引表屬性列和索引類型。
# 本地二級索引的第一列主鍵必須和資料表的第一列主鍵相同。
index_meta = SecondaryIndexMeta('<INDEX_NAME>', ['pk1', 'definedcol1'], ['definedcol2', 'definedcol3'],index_type= SecondaryIndexType.LOCAL_INDEX)
# 設定資料表名稱,不包含存量資料
client.create_secondary_index('<TABLE_NAME>', index_meta, False)
# 設定資料表名稱,包含存量資料。
# 建立索引表後會開啟資料表中存量資料的同步,然後可以通過索引表查詢全部資料,同步時間和資料量的大小有一定的關係。
# client.create_secondary_index('<TABLE_NAME>', index_meta, True)
相關文檔
建立二級索引後,您可以進行單行讀取資料或範圍讀取資料操作。具體操作,請參見使用二級索引讀取資料。
如果不再需要使用二級索引,您可以刪除二級索引。具體操作,請參見刪除二級索引。