鸿鹄 Schemaless SQL

鸿鹄SQL是一种基于读时建模技术的SQL变体,适用于非结构化和半结构化数据的分析。它允许在无需预定义Schema的情况下进行数据查询和操作。与传统关系型数据库的SQL不同,鸿鹄SQL在FROM和SELECT阶段不进行Schema校验,并且列的数据类型在计算时动态确定。支持包括SELECT、JOIN在内的多种查询和定义语言功能,但不包含事务处理和权限控制相关功能。执行顺序主要包括FROM、SELECT等步骤,理解这一顺序对编写和调试SQL至关重要。
摘要由CSDN通过智能技术生成

结构化查询语言( Structured Query Language )简称 SQL,是一门 ANSI 的标准计算机语言,用来访问和操作数据库系统。通常支持 SQL 的数据库系统,都可以让用户使用 SQL 查询数据、更新和删除数据,以及管理数据库系统。

作为一个异构数据分析平台,鸿鹄选定了 SQL 作为用户分析数据和管理数据平台当中的元数据的接口语言。但是,由于鸿鹄聚焦于非结构化数据和半结构化数据分析,所以鸿鹄实现的 SQL 和关系型数据库实现的 SQL 有一定的不同。

本文将主要介绍鸿鹄 Schemaless SQL(以下简称鸿鹄 SQL)的基本概念、 SQL 支持的功能概览和 SQL 查询任务运行的顺序。


同时,会详细说明鸿鹄 SQL 和关系型数据库的 SQL 之间的异同点。

读时建模和鸿鹄 SQL

鸿鹄 SQL 在解析完成之后,会生成计算任务。这些计算任务会提交到鸿鹄读时建模计算引擎进行执行。读时建模计算引擎保证了灵活地分析异构数据。因为鸿鹄 SQL 生成的计算任务需要配合读时建模计算引擎执行,所以鸿鹄 SQL 会和常见的关系型数据库的 SQL 有一些差异点。

在介绍鸿鹄 SQL 之前,我们先介绍和明确读时建模( Schema On Read )的概念。

什么是读时建模

读时建模是一种在读取数据的时候,根据特定规则把数据的信息动态提取的技术,使用该技术分析数据的时候,数据的模式 (Schema)只有在进行数据分析运算的时候,才根据算法的逻辑和输入的数据来动态决定的,在存储数据的时候,不需要指明数据对应的 Schema。 

由于在接收数据的时候并不需要指明数据的 Schema,系统会把数据按照原始收到的内容进行存储,最大限度的保证了数据的完整性。同时保证,能够灵活的低成本,快速地的接收非结构化、半结构化和结构化的数据。

比如,近几年大热的数据湖,就是典型的带有读时建模技术特点的大数据系统。此外,国外知名大数据厂商Splunk 也是读时建模技术的先驱,Splunk 大数据平台因其灵活地处理各种不同格式的数据,收获了很多用户的喜爱。

读时建模技术的优势

具备读时建模技术的系统,相比于对数据ETL之后存储到带有 Schema 的结构化数据库当中的系统,在处理不同格式的数据的场景下,有极大的灵活性。

因为在查询数据的时候,根据查询算法规则将原始数据中的有用信息提取出来,生成字段,不用进行传统的ETL操作,因此,当提取信息的逻辑变化的时候,只需要更新算法,而无须重新导入数据。

该特性使得利用读时建模的系统能够让你把数据先”玩“起来,然后逐步丰富从原始数据中提取的内容和信息,帮助你进一步探寻数据中的规律和使用数据解决问题。

随着业务发展和业务需求变化,不需要重新运行ETL任务,可以通过更新算法的方式获取更多的信息,灵活支撑业务,加快需求落地实现的速度。同时,在业务需求不明朗的情况下,对于”探寻“类任务,可以通过变换对原始数据的分析算法,动态提取需要的信息,研究数据带来的价值和探寻解决问题的可能性。

不论是数据格式变化,或者是数据分析需求变化的时候,在读时建模的系统中,更新数据 Schema 是一个轻量级的操作,可以快速完成。极端情况下,甚至可以在不更新计算算法的时候,完成数据 Schema 的自动更新。例如,在分析Json格式的数据的时候,当Json对象中新增字段的时候,可以不需要更改算法,就直接分析新的数据。

鸿鹄 SQL 的特点

常见的关系型数据库是典型的写时建模的系统,在数据存入数据库的时候需要定义完整清晰的 Schema 信息。鸿鹄 SQL 是构建于鸿鹄读时建模计算引擎基础之上,使用鸿鹄 SQL 分析数据的时候,不需要对原始数据有明确 Schema 定义。 所以,这也是鸿鹄 SQL 和关系型数据库 SQL 产生差异的根本原因。

相比于普通 SQL ,鸿鹄 SQL 有如下两个关键特点:

1、FROM关键字之后跟随的数据集,视图或者表函数,都不需要有严格的 Schema 定义。数据集,视图以及表函数的 Schema,都是在计算任务执行的时候由读时建模引擎动态确定的。引擎会根据存储数据的内容、视图定义的算法逻辑来构建数据的 Schema。

 所以,在 SQL 解析的时候,不做 Schema 的校验。例如,对于这样一个 SQL 查询SELECT id, name FROM my_view,在关系型数据库解析 SQL 的时候,会校验视图my_view的 schema 中是否包含名为id和name的两个列。

但是,在鸿鹄 SQL 当中,不会做这样的校验,如果视图在运行时不存在 name 列,那么我们计算结果中将得到一个都是null值的name列。

2、SQL 投影 (Projection)计算中,引用的列的数据类型,是计算任务执行的时候动态确定。因为所有投影字段,都不需要有明确的 Schema 定义,所以具体的这个字段是整数类型还是字符串类型,计算引擎会根据算法规则和原始数据内容,在计算时动态推断和转换。

SQL语法等方面,鸿鹄 SQL 遵循 ANSI 标准,也提供了常见的关键字的支持,例如 SELECT, WHERE, GROUP BY 等;SQL 涉及到的概念方面,鸿鹄 SQL 也和绝大多数数据库保持了一致,例如,窗口函数,聚合函数,表函数,CTE等。

所以,对于已经熟练使用 SQL 的用户,使用鸿鹄 SQL 几乎没有学习成本。对于不熟悉 SQL 的用户,学习鸿鹄 SQL 之后,在日后使用关系型数据库 SQL 的时候,也有帮助。

鸿鹄 SQL 的功能概览

DQL:数据查询语言部分

鸿鹄 SQL 支持以下关键字:

●SELECT: 字段选取和转换

●WHERE: 数据过滤

●GROUP BY:聚合分析

●HAVING:聚合结果过滤

●PARTITION BY:窗口函数

●ORDER BY:按字段排序

●WITH:公共查询表达式(CTE)

●EXISTS:子查询

●JOIN:关联查询

●UNION ALL:查询结果集合并

●APPLY:表函数

●DISTNCT:字段去重

●LIMIT:查询结果集取前若干条

DDL: 数据定义语言部分

●CREATE VIEW:新建视图

●DROP VIEW:删除视图

●CREATE MATERIALIZED VIEW:新建物化视图

●DROP MATERIALIZED VIEW:删除物化视图

●CREATE LOOKUP TABLE:创建查找表

●DROP LOOKUP TABLE:删除查找表

●鸿鹄是一个数据分析系统,SQL 语法中不支持事务处理相关的功能,例如没有 COMMIT, ROLLBACK,TRANSACTION 等关键字的支持。

●鸿鹄目前也不支持使用 SQL 进行权限访问控制的管理,例如,没有 GRANT, REVOKE 关键字的支持。

鸿鹄 SQL 执行的顺序

一个 SQL 查询任务,在鸿鹄计算引擎执行的时候,遵循如下的计算顺序:

在一个 SQL 查询中, FROM 和 SELECT 的步骤是必须存在的。其他的虚线框标识的步骤是可选的,如果在一个 SQL 查询中有使用到相关的计算功能,则遵循图中的计算顺序。

理解 SQL 的计算顺序对于写出正确的 SQL 查询很关键,同时在调试 SQL 查询的时候也需要对 SQL 执行顺序有明确的理解。

相关参考资料

基础概念:鸿鹄中的数据集

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值