为数据表创建二级索引后,您可以使用索引表、查看索引表信息、使用索引表查询数据以及删除索引表。
前提条件
- 已创建数据表,且数据表的最大版本数(max Versions)必须为1。
- 已为数据表创建预定义列。
创建二级索引
说明 二级索引包括全局二级索引和本地二级索引。更多信息,请参见二级索引简介。
- 命令格式
create_index -t <tableName> -n <indexName> -i <indexType> --pk <primaryKeyName,primaryKeyName> --attr <definedColumn,definedColumn>
配置项说明请参见下表。
配置项 是否必填 示例值 说明 -t,--table 否 mytable 数据表名称。 -n,--name 是 index0 二级索引名称。 -i,--index_type 否 global 二级索引类型。取值范围如下: - global(默认):全局二级索引。
使用全局索引时,表格存储以异步方式将数据表中被索引的列和主键列的数据自动同步到索引表中,正常情况下同步延迟达到毫秒级别。
- local:本地二级索引。
使用本地二级索引时,表格存储以同步方式将数据表中被索引的列和主键列的数据自动同步到索引表中,当数据写入数据表后,即可从索引表中查询到数据。
-k,--pk 是 uid,pid 索引表的索引列,索引列为数据表主键和预定义列的组合。 使用本地二级索引时,索引表的第一个主键列必须与数据表的第一个主键列相同。
-a,--attr 是 col0,col1 索引表的属性列,索引表属性列为数据表的预定义列的组合。 -b,--without_base_data 否 不涉及 构建二级索引时不包括数据表中的存量数据。 - global(默认):全局二级索引。
- 示例
为数据表mytable创建全局二级索引index0,该二级索引包含存量数据。
create_index -t mytable -n index0 -i global --pk pid,uid -a name,col0
为数据表mytable创建全局二级索引index1,该二级索引不包含存量数据。
create_index -t mytable -n index1 -i global --pk pid,uid -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 否 1000 导出范围起始点和结束点之间的数据。 -e,--end 否 2000 - 示例
导出当前表中全部数据到本地文件mydata.json。
scan -o /tmp/mydata.json
导出当前表中uid和name列的数据到本地文件mydata.json。scan -o /tmp/mydata.json -c uid,name
删除二级索引
删除不需要的索引表。
- 命令格式
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