二级索引

当您需要使用不同属性作为查询条件来执行数据查询时,您可以将这些属性作为二级索引的主键列,以实现按照属性快速查询数据的需求。创建二级索引后,您只需向数据表中写入数据,然后根据索引表进行查询。本文介绍如何通过Tablestore CLI创建二级索引、查看索引表信息、使用索引表查询数据、导出数据以及删除索引表。

前提条件

  • 已创建数据表,且数据表的最大版本数(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

不涉及

构建二级索引时不包括数据表中的存量数据。

示例

以下示例用于为数据表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_starttime_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_starttime_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

    以下示例用于导出当前表中uidname列的数据到本地文件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