當您需要使用不同屬性作為查詢條件來執行資料查詢時,您可以將這些屬性作為二級索引的主鍵列,以實現按照屬性快速查詢資料的需求。建立二級索引後,您只需向資料表中寫入資料,然後根據索引表進行查詢。本文介紹如何通過Tablestore CLI建立二級索引、查看索引表資訊、使用索引表查詢資料、匯出資料以及刪除索引表。
前提條件
建立二級索引
二級索引包括全域二級索引和本地二級索引。更多資訊,請參見二級索引簡介。
命令格式
create_index -t <tableName> -n <indexName> -i <indexType> --pk <primaryKeyName,primaryKeyName> --attr <definedColumn,definedColumn>
配置項說明請參見下表。
配置項 | 是否必填 | 樣本值 | 說明 |
-t,--table | 否 | mytable | 資料表名稱。 |
-n,--name | 是 | index0 | 二級索引名稱。 |
-i,--index_type | 否 | global | 二級索引類型。取值範圍如下:
|
-k,--pk | 是 | uid,pid | 索引表的索引列,索引列為資料表主鍵和預定義列的組合。 使用本地二級索引時,索引表的第一個主鍵列必須與資料表的第一個主鍵列相同。 |
-a,--attr | 是 | col0,col1 | 索引表的屬性列,索引表屬性列為資料表的預定義列的組合。 |
-b,--without_base_data | 否 | 不涉及 | 構建二級索引時不包括資料表中的存量資料。 |
樣本
以下樣本用於為資料表mytable建立全域二級索引index0,該二級索引包含存量資料。
create_index -t mytable -n index0 -i global --pk uid,pid -a name,col0
以下樣本用於為資料表mytable建立全域二級索引index1,該二級索引不包含存量資料。
create_index -t mytable -n index1 -i global --pk uid,pid -a name,col0 -b
以下樣本用於為資料表mytable建立本地二級索引index2,該二級索引包含存量資料。
create_index -t mytable -n index2 -i local -k uid,name -a col0,col1
使用表
選擇需要進行操作的表,用於後續表操作或者資料操作。
命令格式
use --wc -t <tableName>
配置項說明請參見下表,
配置項 | 是否必填 | 樣本值 | 說明 |
--wc | 否 | 不涉及 | 表示操作的表為資料表或者索引表。 |
-t,--table | 是 | index0 | 索引表名稱。 |
樣本
使用索引表index0。
use -t index0
查看二級索引資訊
查看錶的資訊。您也可以將表資訊儲存到本地JSON格式的檔案中。
命令格式
desc -t <tableName> -o /localpath/filename.json
配置項說明請參見下表。
配置項 | 是否必填 | 樣本值 | 說明 |
-t,--table | 否 | index0 | 資料表或者索引表名稱。 |
-f,--print_format | 否 | json | 表資訊的輸出格式。取值範圍包括json(預設)和table。 |
-o,--output | 否 | /tmp/describe_table_meta.json | 輸出表資訊到本地JSON格式的檔案中。 |
樣本
以下樣本用於查看當前表的資訊。
desc
以下樣本用於查詢當前表的資訊並將表資訊儲存到本地檔案describe_table_meta.json中。
desc -o /tmp/describe_table_meta.json
使用二級索引查詢資料
讀取單行資料
讀取表中的資料。您也可以將讀取的資料匯出到本地JSON格式的檔案中。
如果讀取的資料行不存在,則返回結果為空白。
命令格式
get --pk '[primaryKeyValue,primaryKeyValue]'
配置項說明請參見下表。
配置項 | 是否必填 | 樣本值 | 說明 |
-k,--pk | 是 | ["86",6771] | 資料表主鍵的值,以數組表示。 重要 設定的主鍵個數和類型必須和資料表的主鍵個數和類型一致。 |
-c,--columns | 否 | name,uid | 讀取的列集合,列名可以是主鍵列或屬性列。如果不設定返回的列名,則返回整行資料。 |
--max_version | 否 | 1 | 最多讀取的版本數。 |
--time_range_start | 否 | 1626860469000 | 讀取版本號碼範圍內的資料。time_range_start和time_range_end分別表示起始時間戳記和結束時間戳記,範圍為左閉右開區間。 |
--time_range_end | 否 | 1626865270000 | |
--time_range_specific | 否 | 1626862870000 | 讀取特定版本號碼的資料。 |
-o, --output | 否 | /tmp/querydata.json | 輸出查詢結果到本地JSON格式的檔案中。 |
樣本
以下樣本用於讀取第一主鍵列值為“86”,第二主鍵列值為6771的行資料。
get --pk '["86",6771]'
掃描資料
掃描擷取整表中所有資料或者擷取最多指定個數的行資料。
命令格式
scan --limit limit
配置項說明請見下表。
配置項 | 是否必填 | 樣本值 | 說明 |
--limit | 否 | 10 | 本次掃描返回的最大行數,可不配置。如果不設定此項,則表示掃描整表中所有資料。 |
樣本
以下樣本用於掃描擷取資料表中的最多10行資料。
scan --limit 10
匯出資料
匯出表中資料到本地JSON檔案中。
命令格式
scan -o /localpath/filename.json -c attributeColumnName,attributeColumnName,attributeColumnName
配置項說明請參見下表。
配置項 | 是否必填 | 樣本值 | 說明 |
-c, --columns | 是 | uid,name | 匯出的列集合,列名可以是主鍵列或屬性列。如果不設定列名,則匯出整行資料。 |
--max_version | 否 | 1 | 最多匯出的版本數。 |
--time_range_start | 否 | 1626865596000 | 匯出版本號碼範圍內的資料。time_range_start和time_range_end分別表示起始時間戳記和結束時間戳記,範圍為前閉後開區間。 |
--time_range_end | 否 | 1626869196000 | |
--time_range_specific | 否 | 1626867396000 | 匯出特定版本號碼的資料。 |
--backward | 否 | 不涉及 | 匯出資料按照主鍵降序排列。 |
-o, --output | 是 | /tmp/mydata.json | 輸出查詢結果到本地指定路徑的JSON格式檔案中。 |
-l,--limit | 否 | 10 | 本次查詢最多返回的行數。 |
-b,--begin | 否 | '["86", 6771]' | 匯出範圍起始點和結束點之間的資料。主鍵範圍為前閉後開的區間。 |
-e,--end | 否 | '["86", 6775]' |
樣本
樣本1
以下樣本用於匯出當前表中全部資料到本地檔案mydata.json。
scan -o /tmp/mydata.json
樣本2
以下樣本用於匯出當前表中uid和name列的資料到本地檔案mydata.json。
scan -o /tmp/mydata.json -c uid,name
樣本3
以下樣本用於匯出當前表中在指定主鍵範圍內的資料到本地檔案mydata.json。其中起始點的第一主鍵列為“86”,第二主鍵列為6771,結束點的第一主鍵列為“86”,第二主鍵列為6775。
scan -o D:\\0testreport\\myh3.json -b '["86", 6771]' -e '["86", 6775]'
刪除二級索引
刪除不需要的索引表。
命令格式
drop_index -t <tableName> -i <indexName> -y
配置項說明請參見下表,
配置項 | 是否必填 | 樣本值 | 說明 |
-t,--table | 否 | mytable | 資料表名稱。 |
-i,--index | 是 | index0 | 二級索引名稱。 |
-y,--yes | 是 | 不涉及 | 顯示確認資訊。命令中必須帶有此配置項。 |
樣本
以下樣本用於刪除當前資料表的索引表index0。
drop_index -i index0 -y
以下樣本用於刪除資料表mytable的索引表index0。
drop_index -t mytable -i index0 -y