精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

擴展 Spark SQL 解析,你知道嗎?

運維 數據庫運維 Spark
大家好久不見了,最近生活發生了很多變故,同時我也大病了一場,希望一切都盡快好起來吧。今天跟大家分享下Spark吧,談談如何修改Spark SQL解析,讓其更符合你的業務邏輯。好,我們開始吧...

 [[394525]]

大家好久不見了,最近生活發生了很多變故,同時我也大病了一場,希望一切都盡快好起來吧。今天跟大家分享下Spark吧,談談如何修改Spark SQL解析,讓其更符合你的業務邏輯。好,我們開始吧...

理論基礎

ANTLR

Antlr4是一款開源的語法分析器生成工具,能夠根據語法規則文件生成對應的語法分析器?,F在很多流行的應用和開源項目里都有使用,比如Hadoop、Hive以及Spark等都在使用ANTLR來做語法分析。

ANTLR 語法識別一般分為二個階段:

1.詞法分析階段 (lexical analysis)

對應的分析程序叫做 lexer ,負責將符號(token)分組成符號類(token class or token type)

2.解析階段

根據詞法,構建出一棵分析樹(parse tree)或叫語法樹(syntax tree)

 

ANTLR的語法文件,非常像電路圖,從入口到出口,每個Token就像電阻,連接線就是短路點。

 

語法文件(*.g4)

上面截圖對應的語法文件片段,定義了兩部分語法,一部分是顯示表達式和賦值,另外一部分是運算和表達式定義。

  1. stat:   expr NEWLINE               # printExpr 
  2.   |   ID '=' expr NEWLINE         # assign 
  3.   |   NEWLINE                     # blank 
  4.   ; 
  5.  
  6. expr:   expr op=('*'|'/') expr     # MulDiv 
  7.   |   expr op=('+'|'-') expr     # AddSub 
  8.   |   INT                         # int 
  9.   |   ID                         # id 
  10.   |   '(' expr ')'               # parens 
  11.   ; 

接下來,加上定義詞法部分,就能形成完整的語法文件。

完整語法文件:

  1. grammar LabeledExpr; // rename to distinguish from Expr.g4 
  2.  
  3. prog:   stat+ ; 
  4.  
  5. stat:   expr NEWLINE               # printExpr 
  6.   |   ID '=' expr NEWLINE         # assign 
  7.   |   NEWLINE                     # blank 
  8.   ; 
  9.  
  10. expr:   expr op=('*'|'/') expr     # MulDiv 
  11.   |   expr op=('+'|'-') expr     # AddSub 
  12.   |   INT                         # int 
  13.   |   ID                         # id 
  14.   |   '(' expr ')'               # parens 
  15.   ; 
  16.  
  17. MUL :   '*' ; // assigns token name to '*' used above in grammar 
  18. DIV :   '/' ; 
  19. ADD :   '+' ; 
  20. SUB :   '-' ; 
  21. ID :   [a-zA-Z]+ ;     // match identifiers 
  22. INT :   [0-9]+ ;         // match integers 
  23. NEWLINE:'\r''\n' ;     // return newlines to parser (is end-statement signal) 
  24. WS :   [ \t]+ -> skip ; // toss out whitespace 

SqlBase.g4

Spark的語法文件,在sql下的catalyst模塊里,如下圖:

 

擴展語法定義

一條正常SQL,例如 Select t.id,t.name from t , 現在我們為其添加一個 JACKY表達式,令其出現在 Select 后面 ,形成一條語句

  1. Select t.id,t.name JACKY(2) from t 

我們先看一下正常的語法規則:

 

現在我們添加一個 jackyExpression

 

jackExpression 本身的規則就是 JACKY加上括號包裹的一個數字

 

將 JACKY 添加為token

 

修改語法文件 如下:

  1. jackyExpression 
  2.   : JACKY'(' number ')' 
  3.   //expression 
  4.   ; 
  5.  
  6. namedExpression 
  7.   : expression (AS? (identifier | identifierList))? 
  8.   ; 
  9.  
  10. namedExpressionSeq 
  11.   : namedExpression (',' namedExpression | jackyExpression )* 
  12.   ; 

擴展邏輯計劃

經過上面的修改,就可以測試語法規則,是不是符合預期了,下面是一顆解析樹,我們可以看到jackyExpression已經可以正常解析了。

 

Spark 執行流程

這里引用一張經典的Spark SQL架構圖

 

我們輸入的 SQL語句 首先被解析成 Unresolved Logical Pan ,對應的是

 

給邏輯計劃添加遍歷方法:

  1.  override def visitJackyExpression(ctx: JackyExpressionContext): String = withOrigin(ctx) { 
  2.    println("this is astbuilder jacky = "+ctx.number().getText) 
  3.  
  4.    this.jacky = ctx.number().getText.toInt 
  5.  
  6.    ctx.number().getText 

再處理namedExpression的時候,添加jackyExpression處理

  1. // Expressions. 
  2.    val expressions = Option(namedExpressionSeq).toSeq 
  3.     .flatMap(_.namedExpression.asScala) 
  4.     .map(typedVisit[Expression]) 
  5.  
  6.  
  7. //jackyExpression 處理 
  8.    if(namedExpressionSeq().jackyExpression()!=null && namedExpressionSeq().jackyExpression().size() > 0){ 
  9.      visitJackyExpression(namedExpressionSeq().jackyExpression().get(0)) 
  10.   } 

好了,到這里從邏輯計劃處理就完成了,有了邏輯計劃,就可以在后續物理計劃中添加相應的處理邏輯就可以了(還沒研究明白... Orz)。

測試

測試用例

  1. public class Case4 { 
  2.    public static void main(String[] args) { 
  3.        CharStream ca = CharStreams.fromString("SELECT `b`.`id`,`b`.`class` JACKY(2) FROM `b` LIMIT 10"); 
  4.        SqlBaseLexer lexer = new SqlBaseLexer(ca); 
  5.        SqlBaseParser sqlBaseParser = new SqlBaseParser(new CommonTokenStream(lexer)); 
  6.        ParseTree parseTree = sqlBaseParser.singleStatement(); 
  7.  
  8.        AstBuilder astBuilder = new AstBuilder(); 
  9.        astBuilder.visit(parseTree); 
  10.        System.out.println(parseTree.toStringTree(sqlBaseParser)); 
  11.        System.out.println(astBuilder.jacky()); 
  12.   } 

執行結果

本文轉載自微信公眾號「麒思妙想」,可以通過以下二維碼關注。轉載本文請聯系麒思妙想公眾號。

 

責任編輯:武曉燕 來源: 麒思妙想
相關推薦

2023-03-06 16:38:30

SQL數據庫

2024-04-07 00:00:00

ESlint命令變量

2024-05-28 09:12:10

2024-04-30 09:02:48

2023-04-26 10:21:04

2023-12-20 08:23:53

NIO組件非阻塞

2023-12-12 08:41:01

2022-12-01 08:09:05

SQLOracleSPM

2025-02-18 08:11:17

2022-12-02 14:12:52

新能源汽車海爾

2020-02-20 08:30:49

OSPF網絡協議路由協議

2022-11-28 00:04:17

2024-07-08 00:00:01

多線程ThreadC#

2022-11-04 14:16:05

2023-01-13 17:02:10

操作系統鴻蒙

2024-01-15 12:16:37

2023-03-21 07:39:51

CentOS掛載硬盤

2024-09-18 07:00:00

消息隊列中間件消息隊列

2021-10-14 06:52:47

算法校驗碼結構

2022-09-29 15:32:58

云計算計算模式
點贊
收藏

51CTO技術棧公眾號

欧美久久一区二区| 国产精品一二三四| 欧美三级日韩三级国产三级| 亚洲免费视频一区| 99久久精品无免国产免费| 欧美日韩综合| 伊是香蕉大人久久| 国产在线a视频| 欧美黑人粗大| 亚洲免费资源在线播放| 欧美重口乱码一区二区| av中文字幕播放| 久久亚洲二区| 欧美国产中文字幕| 精品日韩在线视频| 欧美激情极品| 91麻豆精品国产自产在线观看一区| 日韩精品视频在线观看视频| 99精品老司机免费视频| a亚洲天堂av| 91久久精品国产91久久| 免费av网站在线| 欧美日本不卡| 丝袜美腿精品国产二区| 国产又粗又长又爽| 日本成人手机在线| 欧美日韩精品一区视频| 青青在线视频观看| 2020国产在线| 亚洲综合一区二区三区| 中文字幕欧美人与畜| 男男电影完整版在线观看| 粉嫩一区二区三区性色av| 国产日韩在线看片| 狠狠人妻久久久久久综合| 激情五月***国产精品| www国产精品com| 少妇一级黄色片| 精品不卡一区| 亚洲精选在线观看| 欧美无人区码suv| 久久99国产精品久久99大师| 日韩西西人体444www| 亚洲精品免费一区亚洲精品免费精品一区| xx欧美视频| 狠狠久久五月精品中文字幕| 日韩网站在线免费观看| 九色91在线| 亚洲综合视频网| 亚洲精品天堂成人片av在线播放| 麻豆视频在线观看免费网站| 国产精品久久久久毛片软件| 亚洲五月六月| 免费在线看黄色| 久久久久久久久免费| 久久久久久精| 青青草视频免费在线观看| wwwwww.欧美系列| 久久亚洲一区二区| 青青久草在线| 国产精品久久久久久久浪潮网站| 性欧美.com| 国产丝袜在线| 一个色综合网站| 欧美a v在线播放| 中国字幕a在线看韩国电影| 一本到不卡免费一区二区| www黄色在线| 久久久免费人体| 日韩一区二区影院| 成人在线电影网站| 中国av一区| 精品国产欧美一区二区五十路 | 国产精品日本一区二区不卡视频| 欧美一区2区视频在线观看| 乱码一区二区三区| 亚洲人和日本人hd| 精品国内亚洲在观看18黄| 国产精品永久免费| 欧产日产国产69| 日本不卡一区二区| 亚洲一区亚洲二区| 天天干视频在线观看| 99精品视频一区| 日本一区视频在线观看| 黄色网在线播放| 亚洲成人精品一区| 免费裸体美女网站| 伊人国产精品| 日韩精品福利网站| 潘金莲一级黄色片| 国产视频欧美| 91精品视频免费看| 天堂网www中文在线| 国产精品欧美精品| 人人妻人人添人人爽欧美一区| 国产私拍福利精品视频二区| 日韩欧美一区二区在线视频| 欧美 日本 国产| 亚洲精品午夜av福利久久蜜桃| 午夜免费日韩视频| 国产青青草视频| 国产网站一区二区| 欧美精品久久久久久久久久久| 成人福利片在线| 亚洲国产成人精品电影| 啪啪一区二区三区| 日韩影院免费视频| 国产伦精品一区二区| 国产欧美久久久久久久久| 欧美日韩亚洲视频| 久久久久国产免费| 欧美残忍xxxx极端| 欧美影院久久久| 亚洲免费成人在线| 亚洲欧美综合色| 欧美日韩怡红院| 青青视频一区二区| 欧美疯狂做受xxxx高潮| 夜夜躁狠狠躁日日躁av| 久久久久久久综合日本| 国产 日韩 欧美在线| 国产成年精品| 中文字幕亚洲精品| 久草视频一区二区| 91在线观看污| 欧美人成在线观看| 天堂va欧美ⅴa亚洲va一国产| 亚洲最新av网址| 黄色免费av网站| av在线这里只有精品| 天堂8在线天堂资源bt| 高清久久精品| 久久综合国产精品台湾中文娱乐网| 久久久久亚洲视频| 91麻豆精东视频| 国产成人a亚洲精v品无码| 国产成人精品福利| 欧美激情视频播放| 亚洲国产精品一| 依依成人综合视频| 91丨porny丨九色| 永久亚洲成a人片777777| 国产精品视频26uuu| 岛国在线视频| 欧美视频一区在线| 少妇的滋味中文字幕bd| 日韩av一区二区三区四区| 区一区二区三区中文字幕| 周于希免费高清在线观看 | 国产精品网站入口| 第一页在线观看| 欧美日韩午夜影院| 我要看一级黄色录像| 精品一区二区三区不卡| 中文字幕一区综合| 日本一区二区三区电影免费观看| 欧美黄网免费在线观看| 后进极品白嫩翘臀在线视频| 亚洲成人免费电影| 久久精品无码一区| 蜜桃视频在线一区| 妞干网这里只有精品| 欧美.com| 2020欧美日韩在线视频| 久久天堂电影| 欧美精品自拍偷拍| 成人免费看片98| 91在线国内视频| 五月婷婷之综合激情| 国产国产精品| 含羞草久久爱69一区| 欧美第一视频| 久久影院模特热| 图片区 小说区 区 亚洲五月| 精品久久久久国产| 色欲狠狠躁天天躁无码中文字幕| 久久99蜜桃精品| 免费网站在线观看视频| 亚洲自拍电影| 91精品免费久久久久久久久| 日本高清在线观看| 亚洲人线精品午夜| 国产美女自慰在线观看| 亚洲成av人片观看| 日本综合在线观看| 成人精品视频一区二区三区 | 日韩一级视频| 国内精品美女av在线播放| 男女网站在线观看| 日韩一二三区不卡| 伊人中文字幕在线观看| 亚洲激情网站免费观看| 三叶草欧洲码在线| 国产一区二区三区在线观看精品 | 国产成人av影院| aaa毛片在线观看| 女人色偷偷aa久久天堂| 欧美三级电影在线播放| 99久久香蕉| 成人免费高清完整版在线观看| 国产不卡人人| 美日韩在线视频| av在线女优影院| 亚洲国产一区二区三区四区| 国产永久免费视频| 色狠狠桃花综合| 日韩网红少妇无码视频香港| 亚洲日本在线观看| 亚洲AV无码成人精品区明星换面| 成人丝袜视频网| 中文字幕色网站| 免费一级片91| 日韩黄色片视频| 亚洲无线一线二线三线区别av| 亚洲午夜精品福利| 国产一区不卡| 久热这里只精品99re8久| 日本精品国产| 91九色单男在线观看| 久久精品国产精品亚洲毛片| 日本韩国在线不卡| 久草在线资源福利站| 九色精品美女在线| 黄色网址在线免费观看| 在线精品91av| 懂色av中文在线| 亚洲网站视频福利| 天天影院图片亚洲| 日韩电影中文字幕av| 国产 日韩 欧美 精品| 欧美草草影院在线视频| 国产999久久久| 日韩一区二区精品| va视频在线观看| 欧美一区二区三区视频免费| 国产精品九九九九| 欧美久久久久久久久| 亚洲视频在线观看一区二区| 欧美在线色视频| 国产在线一级片| 欧美私人免费视频| 中文字幕av久久爽| 欧美日韩黄色影视| 一卡二卡三卡在线| 欧美情侣在线播放| 国产无遮挡又黄又爽又色视频| 狠狠色狠狠色综合日日小说| av图片在线观看| 在线观看一区日韩| 亚洲天堂777| 91精品国产麻豆| 国产黄色片免费| 欧美草草影院在线视频| 国产综合无码一区二区色蜜蜜| 精品久久久久久久一区二区蜜臀| 秋霞网一区二区| 亚洲欧美另类国产| 亚洲搞黄视频| 欧美巨大黑人极品精男| av电影院在线看| 热久久美女精品天天吊色| 日韩美女在线看免费观看| 国产精品黄色av| 亚洲老司机网| 国产精华一区二区三区| 特黄特色欧美大片| 日韩精品一区二区三区外面| 日本高清免费电影一区| av磁力番号网| 日韩亚洲国产欧美| 国产黄色特级片| 久久66热re国产| 国产国语老龄妇女a片| 91免费在线视频观看| 美国一级黄色录像| 亚洲五码中文字幕| 日本一本在线观看| 欧美一区二区黄色| 青青草视频在线免费观看| www.久久久久久.com| av中文在线资源库| 国产精品日韩在线| 精品国产一区二区三区成人影院| 鲁丝一区二区三区免费| 99精品一区| 男女激情无遮挡| 美女网站在线免费欧美精品| 9.1在线观看免费| 国产日韩成人精品| 国产一级av毛片| 欧美性色aⅴ视频一区日韩精品| 国产激情视频在线播放| 亚洲欧美综合另类中字| 亚洲妇熟xxxx妇色黄| 热久久视久久精品18亚洲精品| 96sao精品免费视频观看| 麻豆一区区三区四区产品精品蜜桃| 999国产精品永久免费视频app| 波多野结衣综合网| 国产在线不卡一卡二卡三卡四卡| 色噜噜在线观看| 亚洲狠狠丁香婷婷综合久久久| 中文字幕手机在线视频| 亚洲第五色综合网| 二区三区四区高清视频在线观看| 91高潮在线观看| 一区二区三区亚洲变态调教大结局| 日本视频一区在线观看| 亚洲欧洲视频| 91亚洲一区二区| 国产精品久久99| 69亚洲精品久久久蜜桃小说 | 在线视频中文字幕一区二区| 国产小视频免费观看| 久久这里只有精品视频首页| 成人不卡视频| 欧美一二三四五区| 日韩视频一区| www.四虎在线| 亚洲综合999| 国产超碰人人模人人爽人人添| 中文日韩电影网站| japanese23hdxxxx日韩| 国产乱码一区| 亚洲国产专区| 成人一区二区三区仙踪林| 亚洲欧美日韩在线播放| 在线视频欧美亚洲| 在线a欧美视频| 成人亚洲网站| 天天好比中文综合网| 美女久久一区| 男女黄床上色视频| 黄色成人av在线| 日韩有码第一页| 国内精品400部情侣激情| 东京久久高清| 玩弄中年熟妇正在播放| 成人18视频在线播放| 九九九国产视频| 亚洲第一天堂av| 精精国产xxxx视频在线野外 | 日夜干在线视频| 欧美一区三区三区高中清蜜桃| 日韩精品欧美大片| 亚洲成熟丰满熟妇高潮xxxxx| 久久综合999| 中文字幕在线播| 中文字幕精品av| 在线成人免费| 日本aa在线观看| 欧美精品久久久| 日本一本不卡| 伊人国产在线视频| 国产精品久久福利| 国产精品永久久久久久久久久| 久久精视频免费在线久久完整在线看| 四虎在线精品| 精品无码av无码免费专区| 国产成人免费网站| 午夜影院在线看| 国产亚洲欧洲高清一区| 激情久久99| 中文字幕在线乱| 成人综合婷婷国产精品久久蜜臀| 男女视频免费看| 中文字幕久热精品视频在线| www999久久| 3d动漫一区二区三区| 国产亚洲欧美激情| 国产美女精品视频国产| 午夜精品美女自拍福到在线| 国产一区二区三区电影在线观看 | 免费在线观看黄色小视频| 精品奇米国产一区二区三区| 精品国产第一福利网站| 中国成人在线视频| 不卡高清视频专区| 中文天堂在线资源| 色综合男人天堂| 精品国产网站| 日本不卡视频一区| 欧美在线综合视频| 丰满诱人av在线播放| 欧洲av一区| 国产精品伊人色| 99久久久无码国产精品免费蜜柚| 欧美成人亚洲成人日韩成人| 欧美美女在线| 国产精品二区视频| 欧美性大战久久久| 精精国产xxxx视频在线野外 | 免费在线国产视频| 偷拍视频一区二区| 成人激情小说乱人伦| 在线免费av片| 5566日本婷婷色中文字幕97| 欧美阿v一级看视频| av免费播放网站|