跨计算引擎的统一查询中间件Quicksql
Posted 聊点源码
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了跨计算引擎的统一查询中间件Quicksql相关的知识,希望对你有一定的参考价值。
Quicksql是一款跨计算引擎的统一联邦查询中间件,用户可以使用标准SQL语法对各类数据源进行联合分析查询。其目标是构建实时\离线全数据源统一的数据处理范式,屏蔽底层物理存储和计算层,最大化业务处理数据的效率。同时能够提供给开发人员可插拔接口,由开发人员自行对接新数据源。
功能特性:
支持8种数据源查询:Hive, mysql, Kylin, Elasticsearch, Oracle, MongoDB, PostgreSQL, GBase-8s;
支持Spark、Flink双计算引擎;
支持基础CLI命令行查询和JDBC远程连接查询;
JDBC类型数据源可通过YAML配置快速接入,无需修改代码;
提供方言/语法对接模板,支持用户对新数据源的语法自定义;
提供元数据采集功能,批量拉取预置元数据;
支持落地HDFS,支持可配置的异步响应机制;
架构设计
Quicksql 包含三层结构:
语法解析层:负责 SQL 语句的解析、校验、优化、混算 SQL 的切分以及最终生成 Query Plan;
计算引擎层:负责 Query Plan 路由到具体的执行计划中,将 Query Plan 解释为具体的执行引擎可识别的语言;
数据存储层:负责数据的提取、存储;
基本用法
在大多数情况下,我们希望使用一种语言进行数据分析,并且不想考虑与数据分析无关的事情,Quicksql 为此而生。
Quicksql 的目标是提供三个功能:
1. 将所有结构化数据查询统一为 SQL 语法
**都用 SQL **
在 Quicksql 中,你可以这样查询 Elasticsearch:
SELECT state, pop FROM geo_mapping WHERE state = 'CA' ORDER BY state
甚至像这样进行聚合查询:
SELECT approx_count_distinct(city), state FROM geo_mapping GROUP BY state LIMIT 10
屏蔽方言
在过去,查询时需要将相同的语义语句转换为不同引擎的方言,例如:
SELECT * FROM geo_mapping -- MySQL Dialect
LIMIT 10 OFFSET 10
SELECT * FROM geo_mapping -- Oracle Dialect
OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY
在 Quicksql 中,关系数据库不再有方言的概念。你可以使用 Quicksql 的语法来查询任何引擎,就像这样:
SELECT * FROM geo_mapping LIMIT 10 OFFSET 10 -- Run Anywhere
2. 屏蔽不同数据源之间的隔离性
考虑一种情况,你希望关联位于不同引擎中的表或不在同一集群中的表,您可能会遇到麻烦。
但是,在 Quicksql 中,您可以这样查询:
SELECT * FROM
(SELECT * FROM es_raw.profile AS profile //index.tpye on Elasticsearch
WHERE note IS NOT NULL )AS es_profile
INNER JOIN
(SELECT * FROM hive_db.employee AS emp //database.table on Hive
INNER JOIN hive_db.action AS act //database.table on Hive
ON emp.name = act.name) AS tmp
ON es_profile.prefer = tmp.prefer
下图展示了 Quicksql 对于联邦查询的优化流程:
以上是关于跨计算引擎的统一查询中间件Quicksql的主要内容,如果未能解决你的问题,请参考以下文章
Express实战 - 应用案例- realworld-API - 路由设计 - mongoose - 数据验证 - 密码加密 - 登录接口 - 身份认证 - token - 增删改查API(代码片段
统一ElasticsearchMySQLHive的SQL查询引擎,我们把它开源了!