精品欧美一区二区三区在线观看 _久久久久国色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伊人成综合| 一区二区欧美久久| 天天av天天操| 女人高潮被爽到呻吟在线观看 | 国产精品福利av| 春色成人在线视频| 国产又粗又猛又黄视频| 欧美日本一区二区视频在线观看 | 国产精品精品视频| 久久久久久av无码免费网站| 免费精品国产| 日韩欧美亚洲另类制服综合在线| 凹凸国产熟女精品视频| 黄网站在线免费看| 久久精品欧美一区二区三区不卡| www 成人av com| 国产日韩久久久| 欧美午夜影院| 日韩最新中文字幕电影免费看| 精品国产免费久久久久久婷婷| 电影久久久久久| 亚洲国产cao| 中文字幕一区二区三区有限公司| 欧美理论在线观看| 成人一级视频在线观看| 成人疯狂猛交xxx| 五月天婷婷导航| 日韩一级免费| 久久99国产精品久久久久久久久| 精品人妻中文无码av在线 | 欧美一区二视频在线免费观看| www.av网站| 狠狠色丁香久久婷婷综合_中 | 成人国产精品入口免费视频| 一区二区三区高清在线| 一区二区精品在线| 成人精品福利| 久久久高清一区二区三区| 国产精品乱码| www.国产麻豆| 国产麻豆91精品| 国产又爽又黄的激情精品视频 | 国产熟女一区二区| 色婷婷久久久| 亚洲激情小视频| av黄色一级片| 牛牛影视久久网| 亚洲国产欧美一区二区丝袜黑人| 国产在线观看免费播放| 亚洲乱码一区| 日韩一区二区电影| www.桃色.com| 欧美日本三级| 日韩一级黄色大片| 日本女人性视频| 日韩中文字幕在线一区| 欧美刺激脚交jootjob| 极品人妻一区二区| 动漫av一区| 日韩精品黄色网| 女人又爽又黄免费女仆| 国产99亚洲| 影音先锋欧美精品| 成人三级视频在线观看| 婷婷亚洲最大| 欧美剧在线观看| 精品成人免费视频| 久久国产高清| 国产精品免费久久久| 国产伦精品一区二区三区四区| 紧缚捆绑精品一区二区| 99精彩视频在线观看免费| 国模人体一区二区| 26uuu亚洲综合色欧美| 日本不卡久久| 免费观看久久久久| 亚洲成人动漫一区| 欧美成人黑人猛交| 亚洲aⅴ网站| 欧美岛国在线观看| 女尊高h男高潮呻吟| 日韩免费视频| 欧美精品久久久久| 日韩国产成人在线| 国产美女视频一区| 国产精品亚洲不卡a| 九色在线免费| 亚洲精品中文在线观看| 日韩精品 欧美| jizz久久久久久| 日韩你懂的电影在线观看| 日本xxxx裸体xxxx| 色无极亚洲影院| 国产做受高潮69| 最近中文字幕免费观看| 国产精品69毛片高清亚洲| 久久久久se| 嫩草香蕉在线91一二三区| 亚洲电影第三页| 亚洲人辣妹窥探嘘嘘| 成人在线视频你懂的| 亚洲视频在线观看免费| 乱h高h女3p含苞待放| 亚洲一区二区三区高清| 91视频-88av| 狠狠色伊人亚洲综合网站l| 一区二区三区在线视频免费观看| 久久美女福利视频| 成人噜噜噜噜| 一色桃子一区二区| 日本中文字幕在线免费观看| 国产在线麻豆精品观看| 欧美日韩亚洲免费| 美洲精品一卡2卡三卡4卡四卡| 在线视频你懂得一区| 国产免费a级片| 欧美mv日韩| 国产91久久婷婷一区二区| 亚洲精品网站在线| 国产精品水嫩水嫩| 91av在线免费播放| 欧美aaaaaaaa牛牛影院| 欧美大片免费观看| 国产精品久久久久久久免费 | 日韩免费高清视频| 国产18无套直看片| 免费看的黄色欧美网站| 韩国成人一区| 俺来也官网欧美久久精品| 制服丝袜激情欧洲亚洲| 色www亚洲国产阿娇yao| 久久精品女人| 欧美日韩大片一区二区三区| www中文字幕在线观看| 欧美一区二区成人6969| 日本 欧美 国产| 免费成人在线观看| 日本一区视频在线观看免费| 欲香欲色天天天综合和网| 亚洲国产精品字幕| 日韩成人免费在线视频| 成人午夜在线免费| 久久这里只有精品23| 99精品中文字幕在线不卡 | 国产黄色片在线免费观看| 另类综合日韩欧美亚洲| 一区二区三区av在线| jizz久久久久久| 三级精品视频久久久久| 色婷婷久久综合中文久久蜜桃av| 中文字幕高清一区| 久久国产激情视频| 香蕉久久网站| 97超碰人人模人人爽人人看| 欧美性爽视频| 精品国产人成亚洲区| 久久久香蕉视频| 成人自拍视频在线观看| 日韩五码在线观看| 亚洲婷婷丁香| 国产欧美日韩精品丝袜高跟鞋| 色三级在线观看| 9191久久久久久久久久久| 欧美视频一区二区在线| 国产九色精品成人porny| 日韩专区第三页| 国产精品巨作av| 91精品国产高清久久久久久久久| 欧洲天堂在线观看| 欧美三级欧美一级| 暗呦丨小u女国产精品| 国产+成+人+亚洲欧洲自线| 男人的天堂狠狠干| 国产九一精品| 成人性生交大片免费看小说| 成人福利影视| 亚洲天堂成人在线| 国产福利资源在线| 欧美日韩国产一区在线| 能直接看的av| 国产凹凸在线观看一区二区| 777精品久无码人妻蜜桃| 欧洲乱码伦视频免费| 91网在线免费观看| 久草在线资源福利站| 最近2019中文字幕第三页视频| 99草在线视频| 日韩欧美一区二区三区| 亚洲女人久久久| 成人av免费在线观看| 亚洲免费看av| 在线看片欧美| 亚洲精品无人区| 国产精品色呦| 成人黄色午夜影院| 最新欧美色图| 色综合五月天导航| www日韩tube| 亚洲国产精彩中文乱码av在线播放| 99re热视频| 午夜天堂影视香蕉久久| 91免费在线看片| 久久尤物电影视频在线观看| 深爱五月综合网| 欧美96一区二区免费视频| 国产成人永久免费视频| 日韩精品欧美激情一区二区| 国产精品国模大尺度私拍| 国产第一精品| 日本高清不卡的在线| 天堂成人av| 精品国内产的精品视频在线观看| 你懂得网站在线| 亚洲国产小视频在线观看| 国产精品无码专区av免费播放| 日韩欧亚中文在线| 国产中文字幕免费| 亚洲日本在线天堂| 久久午夜精品视频| 91麻豆高清视频| 国产+高潮+白浆+无码| 国产精品亚洲视频| 免费黄频在线观看| 免费在线看一区| 日本三区在线观看| 亚洲精品孕妇| 久操手机在线视频| 欧美a级一区| 影音先锋亚洲视频| 成人久久综合| 无遮挡亚洲一区| 国产一区二区三区网| 欧美日韩精品中文字幕一区二区| 久9re热视频这里只有精品| 91手机在线观看| 国产亚洲观看| 成人激情在线播放| 99精品视频在线免费播放| 国产精品一区二区电影| 秋霞国产精品| 国产精品流白浆视频| 伊人久久高清| 国产日韩亚洲欧美| 欧美啪啪网站| 成人性生交大片免费看视频直播| **国产精品| 91超碰在线免费观看| 日韩一区二区三区高清在线观看| 成人精品久久久| 高清不卡一区| 亚洲自拍另类欧美丝袜| 无码国模国产在线观看| 99在线首页视频| 盗摄系列偷拍视频精品tp| 国模精品娜娜一二三区| 日本午夜精品| 日韩经典在线视频| 日韩欧美中字| www国产免费| 亚洲第一在线| 青青青国产在线视频| 麻豆国产精品777777在线| 狠狠干狠狠操视频| 成人一区二区视频| 9.1成人看片免费版| 国产精品欧美一级免费| 国产高潮流白浆| 亚洲国产乱码最新视频 | 在线免费亚洲电影| 亚洲一区二区天堂| 日韩一级大片在线观看| 天天操天天干天天操| 亚洲午夜av电影| 麻豆影视国产在线观看| 欧美激情久久久久| 国产日韩电影| 91老司机在线| 久久悠悠精品综合网| 日本一区二区免费看| 影视亚洲一区二区三区| 奇米精品一区二区三区| 免费精品99久久国产综合精品| 在线观看网站黄| 91麻豆高清视频| 亚洲女人久久久| 狠狠躁夜夜躁人人躁婷婷91| 久久国产香蕉视频| 亚洲大胆人体视频| 91最新在线| 国内自拍欧美激情| 日韩一区二区三区四区五区 | 992tv在线成人免费观看| 成人视屏在线观看| 成人动漫视频在线观看免费| 九九热线有精品视频99| 国产欧美123| 日本欧美一区二区三区| 亚洲少妇一区二区三区| 久久精品人人做人人综合| 麻豆国产尤物av尤物在线观看| 一本色道综合亚洲| www.蜜臀av.com| 国产亚洲视频在线观看| 国产在线美女| 91在线网站视频| 精品香蕉视频| 亚洲 欧美 日韩 国产综合 在线| 国产一区激情在线| 亚洲精品91在线| 精品福利在线观看| 99久久国产免费| 色黄久久久久久| 黄色激情在线播放| 99www免费人成精品| 欧美黄色录像片| 又色又爽又高潮免费视频国产| 不卡在线观看av| 欧美人妻精品一区二区三区| 欧美日韩国产123区| 免费播放片a高清在线观看| 久久久久日韩精品久久久男男| **精品中文字幕一区二区三区| 天天久久人人| 日韩av一区二| 男女黄床上色视频| 欧美午夜精品久久久久久久| 亚洲国产精品久久久久久6q| 久久久国产精品x99av | 日本在线免费看| 国产精品免费在线免费| 国产不卡一二三区| 国产又大又硬又粗| caoporm超碰国产精品| 欧美成人精品欧美一级| 7777精品伊人久久久大香线蕉完整版| 国产精品四虎| 国产第一区电影| 欧美人妖在线| 亚洲精品无码久久久久久| 99精品国产热久久91蜜凸| 黄色激情视频在线观看| 亚洲国产福利在线| 天堂网在线最新版www中文网| 精品日韩美女| 国产精品三上| 手机免费看av| 欧美视频一区二区三区在线观看 | 欧美极品xxx| 中文字幕有码无码人妻av蜜桃| 中文字幕亚洲一区二区三区五十路 | 无码aⅴ精品一区二区三区浪潮| av中文字幕亚洲| 亚洲天堂av片| 亚洲欧美日韩天堂| 成人h在线观看| 在线视频不卡一区二区三区| 久久99国产精品免费网站| 国产麻豆a毛片| 日韩一区二区三区在线观看| 亚洲淫性视频| 国产一区二区三区四区hd| 西西裸体人体做爰大胆久久久| www.av欧美| 6080午夜不卡| 午夜影院免费在线| 久久久久免费网| 日本女人一区二区三区| 三级全黄做爰视频| 精品免费视频一区二区| 欧美aa在线观看| 亚欧洲精品在线视频免费观看| 国产精品原创巨作av| 日韩av片在线播放| 最新91在线视频| 成人爽a毛片| 久久精品午夜福利| 亚洲精品久久久久久国产精华液| 视频污在线观看| 国产精品户外野外| 亚洲天堂免费| 菠萝菠萝蜜网站| 欧美网站大全在线观看| 欧美aaaxxxx做受视频| 欧美系列一区| 国产成人午夜精品5599| 中文字幕精品无码一区二区| 日韩资源在线观看| 神马久久av| 国产成人美女视频| 狠狠色狠狠色综合日日五| 免费的黄网站在线观看| 精品欧美一区二区精品久久| 蜜臀精品一区二区三区在线观看 | 日本高清中文字幕在线| 亚洲va码欧洲m码| 老色鬼久久亚洲一区二区| 欧美成人手机视频| 中文字幕av一区二区三区谷原希美|