二级索引
当您需要使用不同属性作为查询条件来执行数据查询时,您可以将这些属性作为二级索引的主键列,以实现按照属性快速查询数据的需求。创建二级索引后,您只需向数据表中写入数据,然后根据索引表进行查询。本文介绍如何通过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]'
配置项说明请参见下表。
配置项 | 是否必填 | 示例值 | 说明 |
-p,--pk | 是 | ["86",6771] | 数据表主键的值,以数组表示。 重要 设置的主键个数和类型必须和数据表的主键个数和类型一致。 |
--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