You need to enable JavaScript to run this app.
导航
8.7.1 Unified SQL定义
最近更新时间:2022.09.05 11:25:41首次发布时间:2022.09.05 11:25:41
我的收藏
有用
有用
无用
无用

常用的存储计算引擎包括 MYSQL等,而他们的SQL之间存在较大的差距。这对业务调整后进行数据引擎的迁移、数据建模、查询的SQL解析等都带来了极大的挑战。
Unified SQL 的设计目标是为了消除各引擎SQL之间的差异,提供一致的访问方式。在语法、函数(包括函数名、参数以及语义)、数据类型上做到统一。

各引擎SQL之间的差异

这里简单列举几个引擎的不同之处来直观感受一下。

MySQLHiveElasticSearch
标识符反引号反引号双引号
WHERE中引用别名不可以可以可以
函数: 求百分位不支持percentile_approx(salary, array(0.95))[0]PERCENTILE(salary, 95)
函数: 随机值rand() => 0-1的浮点数rand() => 0-1的浮点数random(seed) => 0-1的浮点数
数据类型BIGINT/VARCHAR/DECIMAL等bigint/string/decimal等long/keyword/double等
类型转换cast(field as BIGINT)cast(field as bigint)field::long
函数名大小写敏感不敏感不敏感不敏感
字符串常量单引号/双引号单引号单引号
子查询必须指定别名

各引擎的 SQL 还存在很多细节部分的差异。Unified SQL 对这些差异尽量的进行了抹除,提供语法和语义一致的SQL体验。

Unified SQL
标识符反引号
WHERE中引用别名可以
函数: 求百分位quantile(salary, 0.95)
函数: 随机值rand() => int64
数据类型string/float/int/bool/date/datetime/array/map
类型转换cast(field as float)
函数名大小写敏感不敏感
字符串常量单引号/双引号
子查询必须指定别名

Unified SQL 主要的应用场景

  • 提供统一的SQL解析能力
  • 提供统一的SQL语义
  • 统一的SQL优化能力

Unified SQL 的局限性

  • 为了避免Unified SQL的木桶效应,对某些语法特性,并不会支持所有的引擎
  • Unified SQL 不能提供底层引擎无法支持的特性,比如Mysql没有数组类型,Unified SQL无法支持Mysql数据集的数组类型。ElasticSearch XPack不支持SELECT DISTINCT语句, Unified SQL无法支持ElasticSearch数据集的SELECT DISTINCT语句。