表格存储 SQL 查询多元索引

2021 年 9 月 8 日 阿里技术


多元索引是表格存储产品中一个重要的功能,多元索引使用倒排索引技术为表格存储提供了非主键列上的快速检索功能,另外也提供了统计聚合功能。表格存储近期开放了SQL查询功能,SQL引擎默认从原始表格中读取数据,非主键列上的查询需要扫描全表。开启了多元索引之后,如果一个查询的过滤条件或者统计聚合可以下推至多元索引执行,那么SQL引擎将部分查询计划转换为多元索引请求,将从多元索引中获取数据,提高查询效率。

一  多元索引SQL算子支持


1  前提条件


在使用SQL查询多元索引之前,首先需要在表格上创建多元索引。如果多元索引包含SQL语句中涉及的数据列,则SQL引擎会通过多元索引读取数据并下推多元索引支持的算子。例如有一张表exampletable有a, b, c, d四列,多元索引中包含了b, c, d三列,只有当SQL语句中只涉及b, c, d中的数据列时,才会从多元索引读取数据。

SELECT a, b, c, d FROM exampletable; /* 多元索引不包含a,b,c,d,扫描全表读取数据,不支持算子下推 */SELECT b, c, d FROM exampletable;    /* 多元索引包含b,c,d,通过多元索引读取数据,支持算子下推 */

2  支持下推的算子


表格存储支持WHERE语句中的部分逻辑运算符和关系运算符下推,以及聚合函数和LIMIT算子下推。

算子类型

下推算子

下推限制

逻辑运算符

ANDOR

不支持NOT算子下推。

关系运算符

=!=<<=>>=BETWEEN ... AND ...

只有数据列和常数的比较才支持算子下推,不支持数据列和数据列比较的算子下推。



聚合函数

基础聚合

MINMAXCOUNTAVGSUMANY_VALUE


去重聚合

COUNT(DISTINCT col_name)


分组函数

GROUP BY col_name

聚合函数可以对全部数据或者GROUP BY分组中的数据进行聚合,只有聚合函数支持下推并且函数参数和GROUP BY参数为数据列时才支持算子下推。



LIMIT

● LIMIT row_count


● ORDER BY col_name LIMIT row_count

ORDER BY的参数为数据列时才支持算子下推。




二  多元索引SQL查询实战


为了直观地展示SQL查询多元索引功能,下文将以某自行车租赁商的订单表为例,使用多元索引上的SQL功能完成一些简单的查询分析任务。某自行车租赁商的订单表如下:


整张表格名为trips,每一笔租车订单都有唯一的订单号作为主键,订单中记录了租车时长、开始日期、结束日期、开始站点、结束站点等信息。表格中包含120万行数据,在没有开启多元索引的情况下对表格行数进行统计,查询会因为超出扫描配额限制而终止。


同样地,如果以非主键列作为查询条件进行查询,也会因为涉及全表扫描超过扫描配额而被终止。


为了能够根据非主键列的值进行查询以及统计聚合,需要创建覆盖全部数据列的多元索引。对于数据量比较大的表格,需要较长的时间等待多元索引同步完成。


1  过滤条件下推


在开启多元索引之后,即可在非主键列上进行条件查询。例如,下图查询起点编号31208到起点编号31209的租车订单,借助多元索引,SQL引擎能够在500毫秒之内查询到全表中满足条件的140行记录。


多元索引支持多个条件的组合,例如查询2010年10月1日当天,站点31208的订单。由于外国10月1日不放假,那天的订单数量并不是很多。


2  统计聚合下推


除了非主键列查询,多元索引还提供了强大的统计聚合能力。在未创建多元索引的时候无法统计行数,但是有了多元索引,能在500毫秒左右查询到行数、站点数、平均租车时长等信息。


同样地,分组统计聚合也可以快速获取结果,例如列出每个站点总订单数目。


过滤条件和统计聚合可以一起使用,例如查询2010年10月1日当天每个站点订单数目。


TopN下推

SQL中包含ORDER BY和LIMIT的语句成为TopN查询,多元索引支持快速查询TopN,图中的查询展示了最近的10条数据。




JDBC数据库开发入门


JDBC(Java DataBase Connectivity,Java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。


点击阅读原文查看课程~

登录查看更多
0

相关内容

表格存储(Table Store)是构建在阿里云飞天分布式系统之上的NoSQL数据存储服务,提供海量结构化数据的存储和实时访问。 表格存储以实例和表的形式组织数据,通过数据分片和负载均衡技术,实现规模上的无缝扩展。

应用通过调用 表格存储 API / SDK 或者操作管理控制台来使用 表格存储服务。

地址: 表格存储_海量数据存储-阿里云
【干货书】R语言探索性数据分析,218页pdf
专知会员服务
61+阅读 · 2021年9月14日
【2020新书】使用R和Python的高级BI分析,425页pdf
专知会员服务
33+阅读 · 2020年10月14日
【2020新书】C++20快速语法参考,第4版,209页pdf
专知会员服务
71+阅读 · 2020年8月5日
【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
Python地理数据处理,362页pdf,Geoprocessing with Python
专知会员服务
113+阅读 · 2020年5月24日
【资源】100+本免费数据科学书
专知会员服务
107+阅读 · 2020年3月17日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
95+阅读 · 2019年12月4日
腾讯数据湖查询优化实践
专知
3+阅读 · 2022年3月24日
慢sql治理经典案例分享
阿里技术
0+阅读 · 2022年2月28日
PolarDB 并行查询的前世今生
阿里技术
0+阅读 · 2022年2月17日
东南亚“美团” Grab 的搜索索引优化之法
InfoQ
0+阅读 · 2021年11月28日
庖丁解牛-图解MySQL 8.0优化器查询转换篇
阿里技术
0+阅读 · 2021年9月16日
庖丁解牛-图解MySQL 8.0优化器查询解析篇
阿里技术
0+阅读 · 2021年9月10日
基于MySQL Binlog的Elasticsearch数据同步实践
DBAplus社群
15+阅读 · 2019年9月3日
NL2SQL:弱监督学习与有监督学习完成进阶之路
PaperWeekly
14+阅读 · 2019年6月24日
一文看懂怎么用 Python 做数据分析
大数据技术
24+阅读 · 2019年5月5日
Elasticsearch地理信息存储及查询之Geo_Point
Analysys易观
13+阅读 · 2018年12月29日
国家自然科学基金
1+阅读 · 2015年12月31日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
18+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
1+阅读 · 2011年12月31日
国家自然科学基金
0+阅读 · 2008年12月31日
SkiQL: A Unified Schema Query Language
Arxiv
0+阅读 · 2022年4月19日
VIP会员
相关VIP内容
【干货书】R语言探索性数据分析,218页pdf
专知会员服务
61+阅读 · 2021年9月14日
【2020新书】使用R和Python的高级BI分析,425页pdf
专知会员服务
33+阅读 · 2020年10月14日
【2020新书】C++20快速语法参考,第4版,209页pdf
专知会员服务
71+阅读 · 2020年8月5日
【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
Python地理数据处理,362页pdf,Geoprocessing with Python
专知会员服务
113+阅读 · 2020年5月24日
【资源】100+本免费数据科学书
专知会员服务
107+阅读 · 2020年3月17日
【干货】大数据入门指南:Hadoop、Hive、Spark、 Storm等
专知会员服务
95+阅读 · 2019年12月4日
相关资讯
腾讯数据湖查询优化实践
专知
3+阅读 · 2022年3月24日
慢sql治理经典案例分享
阿里技术
0+阅读 · 2022年2月28日
PolarDB 并行查询的前世今生
阿里技术
0+阅读 · 2022年2月17日
东南亚“美团” Grab 的搜索索引优化之法
InfoQ
0+阅读 · 2021年11月28日
庖丁解牛-图解MySQL 8.0优化器查询转换篇
阿里技术
0+阅读 · 2021年9月16日
庖丁解牛-图解MySQL 8.0优化器查询解析篇
阿里技术
0+阅读 · 2021年9月10日
基于MySQL Binlog的Elasticsearch数据同步实践
DBAplus社群
15+阅读 · 2019年9月3日
NL2SQL:弱监督学习与有监督学习完成进阶之路
PaperWeekly
14+阅读 · 2019年6月24日
一文看懂怎么用 Python 做数据分析
大数据技术
24+阅读 · 2019年5月5日
Elasticsearch地理信息存储及查询之Geo_Point
Analysys易观
13+阅读 · 2018年12月29日
相关基金
国家自然科学基金
1+阅读 · 2015年12月31日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
18+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2013年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
1+阅读 · 2011年12月31日
国家自然科学基金
0+阅读 · 2008年12月31日
Top
微信扫码咨询专知VIP会员