最新要闻
- 快讯:上映仅半个月 《阿凡达2》拿下2022全球票房年度冠军:超越《壮志凌云2》
- 当前通讯!现货:抗原检测试剂盒3.9元/份(顺丰包邮)
- NVIDIA发布RTX视频超分辨率技术:看视频也有“DLSS”了
- 世界新资讯:时隔15年 Qi2无线充电标准官宣:基于苹果MagSafe打造 磁吸将降临安卓
- 世界讯息:电动车充电自燃一家4口不幸遇难 现场惨烈:网友感慨为何在家充电?
- 百事通!新势力年交付突破百万背后 谁得意 谁失意?
- 环球新消息丨安卓阵营绝无仅有!一加11屏幕体验最接近苹果iPhone ProMotion
- 全球焦点!售价或低于20万 特斯全新入门新车效果图曝光:颜值挺高
- 焦点要闻:祖传1200万像素要终结!曝苹果iPhone 15将配备4800万像素
- 滑雪不会刹车女生一路靠吼下坡 网友调侃练河东狮吼:医生科普受伤有多严重
- 环球新动态:一加11今天发!起步就是12GB+256GB 拒绝凑数卡价位
- PC主机消失不可避免:备胎随时上位
- 快看点丨华硕ROG发布首款四频Wi-Fi 7八爪鱼游戏路由:25Gbps、三万兆网口
- 天天实时:太突然!国产饮料巨头宣布破产:一代名饮国产可乐退场网友唏嘘
- 焦点播报:增程车是必然被淘汰的技术 谁买坑谁?理想、华为反驳
- 当前信息:就因为一张朋友圈截图 全国的蒙脱石散都卖光了
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
环球快资讯:实战Flink sql语法改造
Flink是流计算领域的事实标准,而Flink sql的广泛应用极大地推动了这一标准的确立。
在mysql里我们可以很方便地通过show tables from db1 like "%a"直接从上百个库找出db1库a开头的表,但之前flink只支持show tables查出当前库的表,该如何改造呢?
(资料图)
背景知识
Flink sql运行流程
标准的一条 flink sql 运行起来的流程如下:
sql 解析阶段:
- calcite parser 解析(sql文本 -> SqlNode抽象语法树)
- SqlNode 验证转换阶段:基于Catalog校验(语法、表达式、表信息),校验通过后转换成Operation(SqlNode -> Operation)
- 语义分析阶段:Operation 转换为 RelNode,RelNode 即 Logical Plan(Operation -> RelNode)
- 优化阶段:calcite optimizer 优化(RelNode -> RelNode,剪枝、谓词下推等)
- 物理计划生成阶段:Logical Plan 转换为 Physical Plan(等同于 RelNode 转换成 Transformation)
- 执行阶段:通过 Transformation 集合生成 StreamGraph,提交到运行环境执行。
初看起来确实比较复杂,但对于这种分层的架构而言,我们只要关注与改造语法相关的第一、第二层即可。
Calcite解析规则
Calcite是一个开源的动态数据管理框架,可用来解析优化执行sql,提供了标准的SQL语言、多种查询优化和连接各种数据源的能力。
Calcite 使用 javacc 作为语法解析器,并且使用FMPP作为模板生成器。
三者的关系如下,这样calcite就可以通过javacc对用户自定义的语法进行解析。
fmpp(Parser.jj 模板生成) -> javacc(Parser 生成) -> calcite
以1.12旧版本的 show tables 语法规则为例,开头是一个声明,包括返回值类型、规则名和一个冒号,紧接着的一对花括号中写一些变量声明。下一对花括号中写该规则的具体内容,常用规则如下:
[]: 可忽略
+:前面的内容出现一次或多次
*: 前面的内容出现0次或多次
?: 前面的内容出现0次或一次
|: 前面或后面,与()合用
SqlShowTables SqlShowTables() :{}{{ return new SqlShowTables(getPos()); }}
定义新的sql语法
首先通过调研spark、mysql等流行引擎,如下语法是最合适的,可以看出语法还是比较复杂的,有很多可选的组合,比如
- show table
- show tables from db
- show table in db
- show tables from catalog.db like "%a"
- show tables in catalog.db not like "%a"
SHOW TABLES [ ( FROM | IN ) [catalog.]db ] [ [NOT] LIKE regex_pattern ]
接着就是定义语法文件,Flink使用的fmpp模板生成器将模板文件放在flink-sql-parser模块下,文件名是parserImpls.ftl。根据前面讲到的Calcite解析规则,修改文件如下:
SqlShowTables SqlShowTables() :{ SqlIdentifier databaseName = null; SqlCharStringLiteral likeLiteral = null; String prep = null; boolean notLike = false; SqlParserPos pos;}{{ pos = getPos(); } [ ( { prep = "FROM"; } | { prep = "IN"; } ) { pos = getPos(); } databaseName = CompoundIdentifier() ] [ [ { notLike = true; } ] { String likeCondition = SqlParserUtil.parseString(token.image); likeLiteral = SqlLiteral.createCharString(likeCondition, getPos()); } ] { return new SqlShowTables(pos, prep, databaseName, notLike, likeLiteral); }}
SqlNode转换为Operation
Flink sql框架在处理完校验抽象语法树后,会将SqlNode转换为Operation,由于已经修改了语法树,转换规则、转换后的operation也发生了改变。相关转换在SqlToOperationConverter#convertValidatedSqlNode()。
改造前,由于show tables语法本身非常简单,所以相应的转换也很简单。
private Operation convertShowTables(SqlShowTables sqlShowTables) { return new ShowTablesOperation(); }
改造后,show tables语法后面要跟很多可选的参数,需要对这些参数进行判断和转换,然后生成新的operation。
SqlShowTables这个SqlNode包含数组形式的库名,这个数组可以是[db],也可以是[catalog, db],如果是前者应该将新operation的catalog置为当前catalog,如果是后者应该将catalog置为给定的catalog。
private Operation convertShowTables(SqlShowTables sqlShowTables) { if (sqlShowTables.getPreposition() == null) { return new ShowTablesOperation( sqlShowTables.getLikeSqlPattern(), sqlShowTables.isWithLike(), sqlShowTables.isNotLike()); } String[] fullDatabaseName = sqlShowTables.fullDatabaseName(); if (fullDatabaseName.length > 2) { throw new ValidationException( String.format( "show tables from/in identifier [ %s ] format error", String.join(".", fullDatabaseName))); } String catalogName = (fullDatabaseName.length == 1) ? catalogManager.getCurrentCatalog() : fullDatabaseName[0]; String databaseName = (fullDatabaseName.length == 1) ? fullDatabaseName[0] : fullDatabaseName[1]; return new ShowTablesOperation( catalogName, databaseName, sqlShowTables.getLikeSqlPattern(), sqlShowTables.isWithLike(), sqlShowTables.isNotLike(), sqlShowTables.getPreposition()); }
验证
Flink SQL> create database d1;[INFO] Execute statement succeed.Flink SQL> create table d1.b1(id int) with ("connector"="print");[INFO] Execute statement succeed.Flink SQL> create table t1(id int) with ("connector"="print");[INFO] Execute statement succeed.Flink SQL> create table m1(id int) with ("connector"="print");[INFO] Execute statement succeed.Flink SQL> show tables like "m%";+------------+| table name |+------------+| m1 |+------------+1 row in setFlink SQL> show tables from d1 like "b%";+------------+| table name |+------------+| b1 |+------------+1 row in set
环球快资讯:实战Flink sql语法改造
快讯:上映仅半个月 《阿凡达2》拿下2022全球票房年度冠军:超越《壮志凌云2》
当前通讯!现货:抗原检测试剂盒3.9元/份(顺丰包邮)
NVIDIA发布RTX视频超分辨率技术:看视频也有“DLSS”了
世界新资讯:时隔15年 Qi2无线充电标准官宣:基于苹果MagSafe打造 磁吸将降临安卓
面试官:Docker 有几种网络模式?5 年工作经验都表示答不上来。。
梦想云图Node.JS服务 (网页CAD,在线CAD )
每日看点!upload-lab靶场
世界讯息:电动车充电自燃一家4口不幸遇难 现场惨烈:网友感慨为何在家充电?
百事通!新势力年交付突破百万背后 谁得意 谁失意?
环球新消息丨安卓阵营绝无仅有!一加11屏幕体验最接近苹果iPhone ProMotion
全球焦点!售价或低于20万 特斯全新入门新车效果图曝光:颜值挺高
焦点要闻:祖传1200万像素要终结!曝苹果iPhone 15将配备4800万像素
滑雪不会刹车女生一路靠吼下坡 网友调侃练河东狮吼:医生科普受伤有多严重
环球新动态:一加11今天发!起步就是12GB+256GB 拒绝凑数卡价位
PC主机消失不可避免:备胎随时上位
快看点丨华硕ROG发布首款四频Wi-Fi 7八爪鱼游戏路由:25Gbps、三万兆网口
天天实时:太突然!国产饮料巨头宣布破产:一代名饮国产可乐退场网友唏嘘
焦点播报:增程车是必然被淘汰的技术 谁买坑谁?理想、华为反驳
世界通讯!Spring IOC官方文档学习笔记(六)之自定义bean的特性
数据结构作业(三):直接插入排序 和 归并排序
当前信息:就因为一张朋友圈截图 全国的蒙脱石散都卖光了
只需钻入地下几千米 就有无穷能源!为啥没人干呢?
3000万用户数据泄露:这一次 我们的推荐翻车了
环球热消息:奇闻:为了保护疫苗 200多年前 竟然用孤儿活体运输
全球看热讯:VR:新一代年轻人的鸽王终结者
【前端调试】- 更好的调试方式 VSCode Debugger
世界观点:Python转义字符理解
全球微头条丨大疆官宣手持稳定器新品:RS 3 mini来了
消息!银白装甲!华硕ROG STRIX B760-G GAMING WIFI D4小吹雪主板图赏
微星发布全新B760系列主板:共四款 ITX刀锋小板来了
要闻速递:情侣在酒店电视机拆出针孔摄像头 已发出十几个TB的视频
[Computer Networks]一个http请求的完成的全过程
热消息:不愧最强AM5主板!技嘉X670E AORUS XTREME游戏测试:独门绝技降低内存延迟、提升带宽
Typora-博客园
头条焦点:使用SIPp进行压力测试
观焦点:【插入排序】详细讲解
每日热议!长城山海炮劲敌:国产福特中型皮卡Ranger谍照曝光
天天亮点!情何以堪:男性美甲风暴正席卷全球
今日热搜:荣耀声纹新专利公布:戴口罩依旧能让设备“听懂”
【世界播资讯】三星新款Flex Hybrid OLED屏幕曝光:折叠滑动二合一
【环球速看料】首架国产自主宽带卫星空地互联飞机试飞成功:下载200Mbps
全球观焦点:[概率论与数理统计]笔记:
全球今日报丨美国液化天然气出口量急速飙升:已与卡塔尔并列世界第一
新消息丨2022年中国铁路发送旅客16.1亿人次 全国1、2、3小时高铁出行圈加速形成
即将备战新主机!《塞尔达传说:王国之泪》或是Switch最后第一方大作
天天看点:一年发射61次火箭 马斯克的SpaceX公司更值钱了
最新资讯:AIRIOT答疑第4期|如何使用数据分析引擎?
环球视点!喜讯 | 热烈祝贺方正璞华入选苏州工业园区总部企业服务机构库
环球快讯:大巴司机开车不踩刹车漂移下山 乘客吓坏:我要下车
【天天热闻】OPPO推ColorOS for Pad全新控制中心:多设备管理一站式完成
世界热门:超标电动自行车过渡期能否延期?一地官方回应了
泥潭翻身 AMD x86市场份额逼近40%:重回19年前
全球观速讯丨小米品牌安全“贴心”分享案例:违法翻新倒卖小米电视后果很严重
滚动:记录--短视频滑动播放在 H5 下的实现
[概率论与数理统计]笔记:1.5 事件的独立性
【全球独家】13代酷睿/Zen4都靠边!AMD神U锐龙7 5800X3D卖爆 销量冠军不买能行?
微头条丨中国空间站拍2023年第一缕阳光!如此美景 一天能看16次
当前动态:2023上班第一天:女孩开工前后5分钟“变脸” 网友直呼“这不就是我自己”
90年后归来!方正宣布推出汉文正楷电脑字库:用时6年大量优化
男子买下废弃学校翻新成住宅 每年可收368万租金
【播资讯】2. 向线程函数传递参数
浅谈研发实践的技术债与效能提升
前沿资讯!2022年全国电影总票房超300亿!《长津湖之水门桥》夺冠
接盘暴雪玩家 网易《无尽战区》下周重新开服:首发上线29位英雄
240W超级闪充要来!realme暗示新机充满电不到10分钟
为庆祝传统新年 阿根廷民众烧梅西雕像:当地习俗、已延续66年
当前时讯:Apple Watch Ultra一周上手:不适合普通用户
当前报道:Linux的串口非标准波特率设置更改
最新消息:Go语言实现包的初始化控制器与流程控制器
世界速递!如何站在开发者的角度理解框架的设计思想?
每日热门:文件IO操作开发笔记(一):使用Qt的QFile对磁盘文件存储进行性能测试以及测试工具
全球微资讯!python 中os和sys模块常用方法
与网易和好基无可能 魔兽关服倒计时:暴雪代理谈判进入第二阶段
120Hz自适应刷新0延迟:一加11成屏幕流畅体验天花板
环球速读:五月天版权回归网易云音乐 网友:糟糕的心情好了些
每日消息!俞敏洪给自己2022年打8分:没有欠员工一分钱工资
动态:4599元 雷军分享Redmi K60冠军版特写照:和跑车一样精致
世界视讯!什么是 A/B 实验,为什么要开 A/B 实验?
环球热文:IT 技术工作详解 -小马说工作
每日热文:SweetAlert让消息弹出窗口更加具有个性化!
Redmi K60素皮版本质感堪比手工!雷军:值得你细品
环球看热讯:健康速食!西安饭庄油泼biangbiang面大促:每盒6.66元
今日热门!罗永浩怎么看?西门子回应洗衣机10年包修为保证能修 洋品牌赤裸裸坑国人
Intel Unison正式上线:实现PC与安卓/iOS手机无缝连接
当前消息!你最想看哪个?2023春节档已官宣五部电影 《满江红》比拼《流浪地球2》
每日快看:建筑软件解决方案丨Bluebeam简介
头条:2022 倒带 - NutUI
环球简讯:面试官:为什么 wait/notify 必须与 synchronized 一起使用??
环球微头条丨销量甩Intel+Zen4全家!AMD神U锐龙7 5800X3D卖成年度处理器销冠
全球速递!等了7年!《大圣归来》导演新作《深海》定档 要做国漫里程碑、视觉突破极限
每日速看!10多万买“大路虎” 奇瑞旗舰SUV瑞虎9官图发布:霸气
全球要闻:最贵748元!苹果全系电池涨价 3月1日开始:非针对国人 成本增加所致
【焦点热闻】行驶中天窗可能会掉 奔驰再次召回超12万辆汽车
环球今日讯!诺氟沙星突然爆火!医生紧急提醒:未成年人禁用
每日速递:[概率论与数理统计]笔记:1.4 条件概率
全球消息!699元Redmi 12C开卖 员工:对比友商1500元线下机 竞争力也十足
天天要闻:2023年电动车在美国会更便宜 更多人买得起了!有4点原因
我国最大的固体运载火箭!力箭一号遥二开启总装测试:拟5月发射
故事老套且拖沓?不妨对《阿凡达2》宽容一点