最新要闻
- 看点:799元 ROG龙鳞ACE Aimlab鼠标上市:仅重54g
- 2030年前我国将送人上月球 新一代载人火箭三级发动机点火成功
- 天天快讯:《王者荣耀》兔年限定皮肤英雄公布:马克、瑶妹喜提新装
- 【报资讯】1300多种首次公开!中国空间站居然种了这么多“菜”
- 中国第一商贩:“傻子瓜子”创始人年广九逝世 享年84岁
- 焦点日报:美国上万架航班停飞!初步调查:因一个数据库文件损坏
- 环球观察:小米13 Pro用上安卓最高端屏幕 雷军:价格最贵
- 4000吨巨型“充电宝”广东下水:每天可发2.4万度电
- 每日信息:高德地图上线一键报平安功能 路程家人一看便知
- 天天最资讯丨2022年新生儿爆款名字出炉上热搜:男/女孩这些名字土爆了?
- 环球信息:爱奇艺APP投屏加钱 上海消保委点名批评:不合理、不厚道
- 特斯拉降价效果显著!友商会不会跟进降价?
- 焦点消息!阿凡达2不适合国人?国产科幻大片《流浪地球2》迎战 还有《满江红》等一次看爽
- 12306出现故障无法查车次 客服回应:网络问题 建议多次刷新
- 环球焦点!羡慕吗?微软宣布给员工“无限休假”福利:不再固定天数
- 环球观点:AMD RDNA3显卡架构底层细节公开!606页 应有尽有
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
环球热推荐:看这篇就够了丨基于Calcite框架的SQL语法扩展探索
Calcite在大数据系统中有着广泛的运用, 比如Apache Flink, Apache Drill等都大量使用了Calcite,理解Calcite的原理可以说已经成为理解大数据系统中SQL访问层实现原理的必备条件之一。
但是不少人在学习Calcite的过程中都发现关于Calcite的实践案例其实很少,本文就将为大家详细介绍如何基于Calcite框架的SQL语法扩展探索使之更符合你的业务需求,以及扩展SQL在数栈产品的应用实践。
Calcite介绍及用途
Calcite介绍
Apache Calcite是一个动态的数据管理框架,本身不涉及任何物理存储信息,而是专注在SQL解析、基于关系代数的查询优化,通过扩展方式来对接底层存储。
(资料图片)
目前Apache Calcite被应用在广泛的数据开源系统中,比如Apache Hive、Apache Phoenix、Apache Flink等。
Calcite的用途
Calcite提供了ANSI标准SQL的解析,以及各种SQL 方言,针对来自于不同数据源的复杂SQL,在Calcite中会把SQL解析成SqlNode语法树结构,然后根据得到的语法树转换成自定义Node,通过自定义Node解析获取到表的字段信息、以及表信息、血缘等相关信息。
下图展示了一部分对外提供的接口信息:
sqlparser 解析模块主要提供了以下几种功能 :
• 解析SQL包含的所有表、字段信息
• 解析SQL的udf函数
• 解析SQL的血缘信息,包括表级血缘、字段血缘
• 解析自定义SqlNode
• api服务变量解析替换
SQL语法扩展
了解完Calcite是什么以及用途后,下面为大家分享Calcite SQL语法扩展的相关内容。
SQL语法扩展背景
在 sqlparser 中进行sql解析的场景中,有两种情况需要使用到自定义扩展,一是Calcite不支持的一些语法;二是在一些场景中存在sql中带有${var}自定义变量语法。
那么针对上面的这两种情况,Calcite的自定义扩展是如何实现的呢?自定义扩展主要涉及到以下三个文件:
• Parser.jj:Parser.jj是一个Calcite核心的语法和词法文件,基于Apache FreeMaker模版,该模版包含着变量,这些变量在编译时可以被替换
• parserImpl.ftl:提供自定义SQL语句、literals、dataType的实现方法
• config.fmpp:该文件是FMPP的配置文件,提供了SQL语句、literals、dataType的接口扩展入口
Calcite使用javacc作为语法解析器,freemaker作为模版,把parserImpls.ftl、config.fmpp、Parser.jj模版合成最终的语法词法文件,最终通过javacc编译成自定义的解析器源码,整体流程如下图所示:
扩展SQL实现
● 工程目录
● 扩展sql实现案例
支持以下limit相关语法以及数字可以写成${var}形式:
-> limit count, limit start count
-> limit count offset start
-> offset start limit count
在原生的Calcite解析是支持limit count语法的,但是由于返回SqlOrderBy对象内部类Operator的unparse方法在SQL输出过程中对原始SQL进行了改写,因此需要使用扩展SQL得到正确的SQL。
下面介绍一个limit offset语法扩展样例,扩展SQL如下:
select id, name from test where id > 3 order by id desc limit 1 offset ${offset_val}
整体流程如下:
01
Parser.jj 定义${var}变量的token词法DOLLAR_VARIABLE:
02
Parser.jj 扩展的变量方法接入,下面方法会在解析到limit、offset关键字后面的一个词时进行调用:
03
Parser.jj limit offset在select语法的核心处理逻辑:
-> 定义变量
主要定义了三个boolean类型的变量,isOffsetLimit表示offset limit 语法,isLimitOffset表示limit offset语法,isOnlyLimit表示limit count、limit start count语法。
-> 定义处理逻辑
-> 返回自定义SqlNode
针对符合上面的三个boolean条件时,使用自定义ExtendSqlOrderBy的扩展类。
04
parserImpl.ftl 定义扩展的SqlNode ExtendDollarVariable:
05
config.fmpp 定义包以及扩展实现类的import:
06
扩展SqlNode实现:
-> 变量实现sqlNode
-> 扩展limit实现类ExtendSqlOrderBy,该类实现了SqlOrderBy,并在此基础扩展了limit的SqlNode,以及isOffsetLimit、isLimitOffset、isOnlyLimit三个boolean标识limit的不同语法
通过上面的这些步骤后,最后解析生成的SqlNode语法树如下所示:
扩展SQL在数栈的应用
目前袋鼠云的底层sqlparser sql解析涉及的子产品应用包括API数据服务、离线开发、客户数据洞察(标签)、实时开发等,虽然大部分针对Calcite的SQL语法扩展相对于上层的产品应用感知不是很明显,但是扩展SQL还是解决了一些痛点,主要如下:
• 逐渐替换底层采用了多种解析工具解析的情况,使维护更简单,减少bug的产生
• 解决一些不支持的语法,避免在上层业务层做处理或者在底层做一些特殊处理
以在API数据服务后续接入的like语法改造为例为大家进行分享,目前的API数据服务中支持like ${var}语法,在执行测试中通过传递like语法来确定执行的模糊匹配方式,例如%xx、xx%、%xx%。
收到客户提出的优化like语法场景,袋鼠云本着客户第一的原则,这种合理的优化需求是采纳的。SQL支持like%${var}、${var}%、%${var}%,这样在执行测试中就不需要输入%了,目前扩展SQL语法已经支持这种优化的like语法,预计在2023年上半年会接入进去,下面通过API数据服务展示当前like SQL和扩展后的SQL差异:
● 当前like ${var}处理
-> 生成API
-> 测试执行,模糊匹配需要输入%
● 扩展like %${var}%
-> 生成API
-> 测试执行,由于在SQL阶段已经写了模糊匹配方式,因此可以直接输入值
总结规划
相信通过上面的案例后,大家对于Calcite扩展SQL语法的流程应该有了大致的了解,目前在袋鼠云的业务场景中已经扩展了许多语法,在未来还有一些工作需要进行优化:
• 丰富SQL语法,实现不同数据源扩展SQL语法的隔离
• 逐渐通过SQL语法扩展替换掉底层Calcite和druid共同解析的场景,避免维护多套相同的解析,减少线上问题产生
最后如果是初步接触Calcite SQL语法扩展的同学们,建议先熟悉javacc语法。
地址:https://javacc.github.io/javacc/
想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:https://www.dtstack.com/?src=szbky
同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术qun」,交流最新开源技术信息,qun号码:30537511,项目地址:https://github.com/DTStack
-
环球热推荐:看这篇就够了丨基于Calcite框架的SQL语法扩展探索
Calcite在大数据系统中有着广泛的运用,比如ApacheFlink,ApacheDrill等都大量使用了Calcite,理解Calcite...
来源: -
04-Sed操作参数
1Sed操作参数1 1s--替换s表示替换(substitute)文件内的字符串。[address1],[address2]s pattern replacement [flag] s
来源: 环球热推荐:看这篇就够了丨基于Calcite框架的SQL语法扩展探索
今日讯!都想来分一杯羹,低代码到底服务谁?
04-Sed操作参数
看点:799元 ROG龙鳞ACE Aimlab鼠标上市:仅重54g
2030年前我国将送人上月球 新一代载人火箭三级发动机点火成功
天天快讯:《王者荣耀》兔年限定皮肤英雄公布:马克、瑶妹喜提新装
【报资讯】1300多种首次公开!中国空间站居然种了这么多“菜”
中国第一商贩:“傻子瓜子”创始人年广九逝世 享年84岁
全球速递!【Python爬虫实战项目】Python爬虫批量下载去哪儿网站旅游数据保存本地
世界热门:辛苦加班了一年,为何年终奖比同级同事少?
天天视点!Nginx 高级篇
天天热推荐:python中argparse模块的用法
【天天快播报】使用python自动发送图片给微信好友
焦点日报:美国上万架航班停飞!初步调查:因一个数据库文件损坏
环球观察:小米13 Pro用上安卓最高端屏幕 雷军:价格最贵
4000吨巨型“充电宝”广东下水:每天可发2.4万度电
每日信息:高德地图上线一键报平安功能 路程家人一看便知
天天最资讯丨2022年新生儿爆款名字出炉上热搜:男/女孩这些名字土爆了?
环球热文:【验证码逆向专栏】某验二代滑块验证码逆向分析
开源动物行为分析实验箱(斯金纳箱)特色解析及试用条款
环球信息:爱奇艺APP投屏加钱 上海消保委点名批评:不合理、不厚道
特斯拉降价效果显著!友商会不会跟进降价?
焦点消息!阿凡达2不适合国人?国产科幻大片《流浪地球2》迎战 还有《满江红》等一次看爽
12306出现故障无法查车次 客服回应:网络问题 建议多次刷新
环球焦点!羡慕吗?微软宣布给员工“无限休假”福利:不再固定天数
C#、TS和Dart对比4.1:类型概述
全球速递!虚拟串口及其在串口转以太网中的应用
别催了,别催了,这篇文章我一次性把Shell的内容说完
环球观点:AMD RDNA3显卡架构底层细节公开!606页 应有尽有
前沿资讯!微信隐藏功能无了!群空间助手小程序宣布3月下线:号称永久保存
世界滚动:腾讯优酷后!爱奇艺限制投屏 会员只能看480P:专家发声 用户只能接受
环球快看点丨SUV比亚迪卖爆!榜一大哥月销7万+、一代神车没落
《黑豹2》女主演利蒂西娅·赖特:续集已在计划中
头条:疑似零跑C11路边停车起火 车尾疯狂往外喷火
男子开豪车带马狗羊回家过年 它们都是自己的家人:画面让网友难受
公交司机边开车边抠脚引乘客担忧 官方回应:会研究处理
焦点短讯!这些是最热门的机器学习方法!
【播资讯】通过事件总线EventBus/AsyncEventBus进行JAVA模块解耦 (史上最全)
内存、SSD价格雪崩 韩国芯片双雄终于顶不住了?
又一日系品牌拥抱比亚迪 铃木EVX概念车首发:用上刀片电池
全球视点!美国最大私人地主 大量买地引质疑!比尔盖茨回应:只为提高产量
国产家轿又一“黑马”诞生 长安逸达首发亮相
原长城汽车总裁王凤英将出任小鹏CEO 接替何小鹏?内部回应
围棋哪个国家最强?围棋哪个颜色先下?
都挺好苏明成知道自己不是亲生的是第几集?都挺好的结局是什么?
魂来枫林青的下一句是什么?魂来枫林青是什么意思?
李宁标志刺绣是真的吗?李宁标志设计含义
美的净水器好不好?净水器哪个牌子质量好性价比高?
ios7输入法怎么设置成搜狗?ios7输入法打不出汉字怎么办?
怎么修改系统启动项?修改系统启动项的方法有哪些?
新资讯:MySQL间隙锁、行锁的读写阻塞实验
win8如何找到硬件驱动程序?win8怎么进入安全模式?
港利通手机怎么样?港利通手机怎么恢复出厂设置密码?
当前播报:推特广告收入下跌严重:考虑出售15亿用户名创收
今日看点:春节正常发货:仁和N95灭菌级口罩25片15.9元发车
【全球独家】跟上Windows本步伐!苹果正开发触摸屏Mac笔记本:最早2025年发布
秒变战神!杰士邦延时避孕套大促:立减200元 不到20到手
全球新动态:文件出台!车险价格最高可再降23% 开车越稳越便宜
天天报道:TapTap 算法平台的 Serverless 探索之路
我用AI去讨债:一顿操作猛如虎 3000要回350
环球观察:不止投屏缩水 爱奇艺蓝光码率仅蓝光碟1/13 1080P也糊
4999元限量发售!雷军:小米13定制色水泥灰卖的最好
焦点关注:育碧《怒海战记》再度延期
网速比5G提升100倍 2023年我国将全面推进6G技术研发
环球热议:读编程与类型系统笔记05_函数类型
天天资讯:关于 Serverless 应用架构对企业价值的一些思考
焦点热文:男子高速撞鸟 鸟腿成三叉戟立标 丰田秒变“玛莎拉蒂”
世界关注:解除屏蔽!微信已可正常跳转抖音链接
环球最资讯丨造车新势力第一 广汽埃安宣布将涨价:最高涨6000元
全球今亮点!称雷军是导师、大哥 何小鹏:但不想成为他 太累了
每日热文:郭明錤:iPhone 15 Pro将搭载“固态按键” 取消实体键
【播资讯】东北夫妻去三亚 为省8千机票开电车3600公里 充11次电 比油便宜
新资讯:9499元割韭菜!厂商喷RTX 4080太贵 惹怒NV后帖子删除:用户叫好
短讯!24岁湖北小伙搭17个顺风车到格鲁吉亚求婚引羡慕:女子同意 结婚不要彩礼
全球速递!美国航空局系统故障 致全美航班停飞:已有8609架次延误 1251架次取消
每日快看:失灵事故再现?特斯拉刹车又出问题:八车连环相撞!这次不一样
【全球新视野】洛谷P1040. 加分二叉树
C#、TS和Dart对比2:变量和作用域
电脑故障影响数千架次航班!全美航班停飞限制取消
灵动岛只是过渡品!iPhone 16或配备屏下Face ID
当前要闻:小米将参加MWC2013:不会发布小米13 Ultra
弄疯了无数人的游戏:差点让我砸掉显示器!
焦点消息!登录、投屏处处受限!视频平台被指吃相难看 你还开会员吗?
网址导航
全球看点:P2448 无尽的生命
[概率论与数理统计]笔记:3.3 随机向量的函数的分布与数学期望
世界新资讯:React核心概念与JSX
热消息:伊利回应30支冰糕分30箱发货 被网友吐槽太浪费:订单推送失误造成
全球热点!网友拿到了一加11:真的跟老板说的一样巨流畅
mac下php环境搭建
天天快讯:MQ——如何保证消息不会丢失
144MB缓存游戏神U!AMD锐龙7000X3D定档:情人节大礼
【当前热闻】美国所有航班都已停飞 电脑系统竟突发故障:官方给出恢复时间
速看:偶数位(熟悉二进制)
当前信息:Mysql页分裂
焦点关注:日系首款电动B级轿车!本田雅阁插混版来了:可挂绿牌
广州一宝马SUV冲撞人群 官方通报:已致5死13伤 司机被控制
环球即时:太阳4天内发出两次X级耀斑:几天后指向地球、或引强烈地磁暴
世界视点!02-Sed语法介绍
每日聚焦:真我GT Neo5标准版曝光:不到200g机身塞进5000mAh和骁龙8+