多元索引基于倒排索引和列式存储,可以解决大数据的复杂查询难题,包括非主键列查询、全文检索、前缀查询、模糊查询、多字段自由组合查询、嵌套查询、地理位置查询、统计聚合(max、min、count、sum)等功能。多元索引在车联网场景中主要用于根据任意车辆属性组合检索车辆。
查询场景
多元索引目前提供通用查询接口(Search)和数据导出接口(ParallelScan)。
- 如果请求关心排序、统计聚合,或者是终端客户的直接查询请求,需要用Search接口。
- 如果请求不关心排序,只关心把所有符合条件的数据尽快返回,或者是计算系统(Spark、Presto等)拉取数据,可以考虑ParallelScan接口。
ParallelScan接口相对于Search接口,保留了所有的查询功能,但是舍弃了排序、统计聚合等分析功能,带来了5倍以上的性能提升,因此可以实现1分钟内上亿级别数据行的导出能力,导出能力可以水平扩展,不存在上限。
接口 | 说明 |
---|---|
Search | 全功能查询接口,支持多元索引的所有功能点。
|
ComputeSplits+ParallelScan | 多并发数据导出接口,支持多元索引中的查询功能,不支持排序、统计聚合等分析功能。 相对于Search接口,ParallelScan可以提供更好的性能,单并发时性能(吞吐能力)是Search接口的5倍。
|
核心功能
- 非主键列的查询
仅使用主键列或主键列前缀查询,无法满足一些查询场景的需求。使用多元索引,您可以使用非主键列进行查询,您仅需要对要查询的列(Column)建立多元索引,即可通过该列的值查询数据。
- 多字段自由组合查询
多元索引的多字段自由组合查询功能适用于订单场景。在订单场景中,表的字段数可能多达几十个,在创建表时很难完全确定需要查询字段的组合方式。即使在确定需要查询的字段的组合方式的情况下,组合方式会多达上百个,如果使用关系型数据库中可能需要创建上百个索引。同时,如果某种组合方式提前没预想到,没创建,则无法查询。
使用表格存储,您只需要建立一个多元索引,在索引中包括可能需要查询的字段名,那么查询的时候可以随意自由组合这些字段进行查询。同时多元索引还支持多种关系,例如And、Or和Not等。
- 地理位置查询
随着移动设备的普及,地理位置信息的价值越来越大,越来越多的应用中都加了地理位置信息,例如朋友圈、微博、外卖、运动和车联网等。这些应用中的信息中含有地理位置数据,那么就需要相匹配的查询能力。
表格存储多元索引提供了以下地理位置查询功能。- Near:以一个点为原点,查询指定附近距离圈内的点,例如朋友圈中附近的人。
- Within:指定一个矩形框或多边形框,查询出该框内的点。
基于上述功能,如果应用中需要地理位置相关查询,使用表格存储可以一站式解决,不再需要借助其他数据库或搜索系统。
- 全文检索
表格存储多元索引提供了分词能力。分词可以支持全文检索。但是表格存储和搜索引擎不一样的地方是,只提供最基础的BM25相关性,不提供自定义相关性能力,所以如果有相关性的搜索需求,还是建议使用搜索系统,否则可以使用表格存储满足需求。
目前提供了5种分词类型:单字分词、分隔符分词、最小数量语义分词、最大数量语义分词和模糊分词,详情请参见分词。
- 模糊查询
多元索引提供了通配符查询,等价于关系型数据库中的like功能,您可以指定字符和任意通配符:
?
或*
,即可实现类似于like的功能。 - 前缀查询
表格存储多元索引提供前缀查询功能。除了中英文外,其他语言也适用,例如前缀查询“apple”可能会查询出“apple6s”、“applexr”等。
- 嵌套查询
在线数据中,除了扁平化的一层结构外,还存在一些更复杂的多层结构场景,例如图片标签:某个系统中存储了大量图片,每个图片都有多个实体,例如有房子、有轿车、有人。在每个图片中,这些实体占的位置和空间大小都不同,所以每个实体的权重(score)也不一样,这样相当于每个图片都有多个标签,每个标签有一个名字和一个权重分。如果要根据标签中的条件查询,这时候就需要使用到嵌套查询。
JSON数据格式{ "tags": [ { "name": "car", "score": 0.78 }, { "name": "tree", "score": 0.24 } ] }
嵌套查询可以优美的解决多层逻辑关系的数据存储和查询,为复杂数据的建模提供了极大的便利性。
- 去重
多元索引为查询结果提供了去重功能。去重功能可以限制某个属性在一次结果中的最多个数,提供更好的结果多样性能力。例如电商搜索中,搜索一个“笔记本电脑”可能第一页全是某一个品牌的电脑,返回结果对用户并不友好,多元索引的去重功能可以避免这种情况。
- 排序
表格存储提供主键的字母序排序功能,但如果需要按照其他字段排序,您可以使用多元索引的排序能力。目前表格存储提供了丰富的排序能力,包括正序、逆序;单条件、多条件等。默认返回结果是按照表中的主键顺序排序。多元索引的排序都是全局排序。
- 数据总行数
使用多元索引查询时可以指定返回这次请求命中的数据行数。如果指定一个空查询条件,则所有创建了索引的数据都符合条件,此时返回的数据总行数就是表中已创建了索引的数据总行数。如果停止写入数据,且数据都已经创建了索引,则此时返回的数据总行数就是数据表中的总行数。此功能可以用于数据校验、运营等场景。
- 统计聚合
多元索引提供常见的统计聚合功能,包括了最大值(Max)、最小值(Min)、平均值(Avg)、求和(Sum)、统计行数(Count)、去重统计行数(DistinctCount)、分组(GroupBy)、百分位(Percentile)和直方图(Histogram)功能,可以满足用户在轻量级分析场景对基本统计聚合的需求。
使用多元索引
您可以通过以下方式使用多元索引来查询数据。