当前位置: 首页 > news >正文

网站首页模块如何做链接东莞做网站的公司吗

网站首页模块如何做链接,东莞做网站的公司吗,全网引流推广 价格,wordpress 评论数量我们在之前的文章中#xff0c;介绍了 Doris 官方提供的两种方言转换工具#xff0c;分别是 sql convertor 和方言 plugin。StarRocks 目前同样也提供了类似的方言转换功能。本文我们就一起来看一下这个功能的实现与 Doris 相比有何不同。 一、Trino 方言验证 我们可以通过…我们在之前的文章中介绍了 Doris 官方提供的两种方言转换工具分别是 sql convertor 和方言 plugin。StarRocks 目前同样也提供了类似的方言转换功能。本文我们就一起来看一下这个功能的实现与 Doris 相比有何不同。 一、Trino 方言验证 我们可以通过如下 SQL 来验证 Trino 的方言转换在 SR 中的效果 set enable_profile true; set sql_dialect starrocks; select BOROUGH, approx_count_distinct(ZIP_CODE) cnt from crashdata group by BOROUGH order by cnt desc; set sql_dialect trino; select BOROUGH, approx_distinct(ZIP_CODE) cnt from crashdata group by BOROUGH order by cnt desc;针对上述查询我们在 SR 集群执行结果如下所示 可以看到执行结果完全一致说明方言转换已经生效并且符合预期。通过 WebUI 查看提交的两条 SQL 页面上显示的仍然是原始的 SQL 而不是改写之后的。如果在 SR 的方言下执行 SQL2 的话那么会直接报错如下所示 提示函数找不到这也是符合预期的因为 approx_distinct 这个函数在 SR 中是不存在的。下面我们就结合代码来看一下 SR 是如何实现这个方言转换功能的。 二、Trino AST 简介 由于 Trino 的方言支持主要思路是将 Trino 的相关结构转换成 SR 的结构因此这里先简单了解下 Trino 的 AST 相关结构 后续提到的相关结构就可以直接参考上述图片。 三、Trino Transformer 介绍 SR 在 FE 中实现了一套 transformer 可以将 Trino 的 function 转换为 SR 的 function从而实现了方言转换的功能。 3.1 整体流程图 整个 parse 的相关流程如下所示 上述流程可以分为如下几个步骤 FE 启动的时候Trino2SRFunctionCallTransformer 会通过静态方法将所有 Trino 到 SR 的函数映射注册到 TRANSFORMER_MAP 这个 map 中FE 调用 Trino 的 SqlParser 将 sql string 转换为 Trino 的 Statement 结构可以参考上述的 AST 结构图在 trino/AstBuilder 中将 Trino 的 Statement 转换为 SR 的 StatementBasetransformer 用于进行函数转换根据 sql 中的 Trino 函数名在 Map 中进行匹配找到对应的 FunctionCallTransformer在 FunctionCallTransformer 中构造 FunctionCallRewriter最终返回至 trino/AstBuilder完成函数的转换继续后续的其他操作最终生成 SR 的 StatementBase结构完成 parse 操作。 这里我们来一一看下对应的操作。 3.2 函数映射注册 Trino 到 SR 的函数映射注册代码位于 Trino2SRFunctionCallTransformer 中这个类在加载的时候会完成对应的函数映射注册如下所示 private static void registerAllFunctionTransformer() {registerAggregateFunctionTransformer();registerArrayFunctionTransformer();registerDateFunctionTransformer();registerStringFunctionTransformer();registerRegexpFunctionTransformer();registerJsonFunctionTransformer();registerURLFunctionTransformer();registerBitwiseFunctionTransformer();registerUnicodeFunctionTransformer();registerMapFunctionTransformer();registerBinaryFunctionTransformer();// todo: support more function transform }以 registerAggregateFunctionTransformer 为例这里负责对聚合函数的映射进行注册相关代码如下所示 private static void registerAggregateFunctionTransformer() {// 1.approx_distinctregisterFunctionTransformer(approx_distinct, 1,approx_count_distinct, ImmutableList.of(Expr.class));// 2. arbitraryregisterFunctionTransformer(arbitrary, 1,any_value, ImmutableList.of(Expr.class));// 3. approx_percentileregisterFunctionTransformer(approx_percentile, 2,percentile_approx, ImmutableList.of(Expr.class, Expr.class));通过这个函数的映射Trino 的 approx_distinct 函数就会被转换成 SR 的 approx_count_distinct对应的结构体转换如下所示 可以看到最终在 map 中保存了 approx_distinct 这个 Trino 函数到 SR 的映射。需要注意的是map 的 value 是一个 list主要是为了处理参数不同的重载函数。通过 debug 可以直接查看已经注册的函数映射 其中PlaceholderExpr 就是用来保存 SR 函数的输入参数主要就是 index 和 参数的类型后续用于进行匹配最终会被替换成实际的函数参数位于 FunctionCallRewriter 的 sourceArguments 中。 3.3 Transformer 匹配 在 FE 启动之后Trino 的函数映射已经全部注册完成。当我们通过设置方言为 trino 之后首先需要根据 Trino 的函数名去 map 中进行匹配由于重载函数的存在因此还需要比较对应的参数类型。相关的函数调用如下所示 parse(SqlParser.java):56 --parseWithTrinoDialect(SqlParser.java):68/74 ---toStatement(TrinoParserUtils.java):42 ----accept(io/trino/sql/tree/Statement.java) // 省略部分函数调用栈 -visitFunctionCall(trino/AstBuilder.java):713 --convert(Trino2SRFunctionCallTransformer.java):47 ---convertRegisterFn(Trino2SRFunctionCallTransformer.java):62 ----match(FunctionCallTransformer.java)其中match函数的参数为 ListExpr对应的就是 2.1 中 ListExpression 转换后的结果即将 Trino 的 Expression 转换为 SR 中的 Expr 结构。匹配的过程主要分为两步 比较参数个数是否一致比较每一个 PlaceholderExpr 的类型是否是实际参数类型的超类。 两个条件都满足的话则证明这个 transformer 是相符的则继续进行后续的转换。 3.4 函数转换 转换操作主要就是生成一个 FunctionCallRewriter 对象相关的函数调用如下所示 visitFunctionCall(trino/AstBuilder.java):713 -convert(Trino2SRFunctionCallTransformer.java):47 --convertRegisterFn(Trino2SRFunctionCallTransformer.java):69 ---transform(FunctionCallTransformer.java):113 ----ctor(FunctionCallRewriter.java)我们通过 debug 分别对比下 Trino 和 SR 中的function call 的结构如下所示 可以看到最终生成的 FunctionCallRewriter 中已经包含了具体的参数即 ZIP_CODE 这个列对应的类型是 SlotRef而 2.2 中的 PlaceholderExpr 只有类型信息即 ExprSlotRef是其一个子类所以类型可以匹配上。 四、总结 4.1 与 Doris 方言功能比较 由于 Doris 的 sql convertor 工具是借助 SqlGlot 实现的因此与 Doris 本身关系不大。这里我们主要比较下 Doris 的方言 plugin 与 SR 的 transformer 优缺点 方言功能优点缺点SR Transformer实现比较完善支持各种函数转换与SR代码耦合紧并且仅支持Trino扩展性一般Doris Plugin通过Plugin的方法与Doris代码进行了解耦扩展性相对较好目前支持Trino和Spark实现比较简单函数转换未提供并且存在一些问题可用性较差 4.2 思考小结 由于目前 SR 官方只支持 Trino 的方言转换并且与源码耦合比较紧如下所示 // SqlParser.java public static ListStatementBase parse(String sql, SessionVariable sessionVariable) {if (sessionVariable.getSqlDialect().equalsIgnoreCase(trino)) {return parseWithTrinoDialect(sql, sessionVariable);} else {return parseWithStarRocksDialect(sql, sessionVariable);} }如果想要完整的支持一种新的方言转换需要实现对应的 FunctionCallTransformer 和 AstBuilder并修改上述的 if-else总体代码开发量比较大。此外本文的所有内容是笔者基于 StarRocks-3.3 版本分析、总结而来如有错误欢迎指正。 五、参考文档 sql_dialect[Feature] Support Trino parser on StarRocks #14830
文章转载自:
http://www.morning.fgqbx.cn.gov.cn.fgqbx.cn
http://www.morning.sqqkr.cn.gov.cn.sqqkr.cn
http://www.morning.mkbc.cn.gov.cn.mkbc.cn
http://www.morning.xclgf.cn.gov.cn.xclgf.cn
http://www.morning.ndhxn.cn.gov.cn.ndhxn.cn
http://www.morning.xtkw.cn.gov.cn.xtkw.cn
http://www.morning.xhhzn.cn.gov.cn.xhhzn.cn
http://www.morning.rwpjq.cn.gov.cn.rwpjq.cn
http://www.morning.sfwfk.cn.gov.cn.sfwfk.cn
http://www.morning.wpspf.cn.gov.cn.wpspf.cn
http://www.morning.ylqrc.cn.gov.cn.ylqrc.cn
http://www.morning.fkwp.cn.gov.cn.fkwp.cn
http://www.morning.rydbs.cn.gov.cn.rydbs.cn
http://www.morning.cwgpl.cn.gov.cn.cwgpl.cn
http://www.morning.rttp.cn.gov.cn.rttp.cn
http://www.morning.rdlfk.cn.gov.cn.rdlfk.cn
http://www.morning.gstg.cn.gov.cn.gstg.cn
http://www.morning.hcsnk.cn.gov.cn.hcsnk.cn
http://www.morning.tmtrl.cn.gov.cn.tmtrl.cn
http://www.morning.sacxbs.cn.gov.cn.sacxbs.cn
http://www.morning.qkrz.cn.gov.cn.qkrz.cn
http://www.morning.bfbl.cn.gov.cn.bfbl.cn
http://www.morning.ktmpw.cn.gov.cn.ktmpw.cn
http://www.morning.nypsz.cn.gov.cn.nypsz.cn
http://www.morning.ppbrq.cn.gov.cn.ppbrq.cn
http://www.morning.nmngg.cn.gov.cn.nmngg.cn
http://www.morning.zlmbc.cn.gov.cn.zlmbc.cn
http://www.morning.nhrkc.cn.gov.cn.nhrkc.cn
http://www.morning.nbsfb.cn.gov.cn.nbsfb.cn
http://www.morning.brbnc.cn.gov.cn.brbnc.cn
http://www.morning.dbqg.cn.gov.cn.dbqg.cn
http://www.morning.xxsrm.cn.gov.cn.xxsrm.cn
http://www.morning.hwnqg.cn.gov.cn.hwnqg.cn
http://www.morning.kzqpn.cn.gov.cn.kzqpn.cn
http://www.morning.zycll.cn.gov.cn.zycll.cn
http://www.morning.jbblf.cn.gov.cn.jbblf.cn
http://www.morning.wkmrl.cn.gov.cn.wkmrl.cn
http://www.morning.gmwqd.cn.gov.cn.gmwqd.cn
http://www.morning.pqnpd.cn.gov.cn.pqnpd.cn
http://www.morning.xqjrg.cn.gov.cn.xqjrg.cn
http://www.morning.rqqct.cn.gov.cn.rqqct.cn
http://www.morning.lksgz.cn.gov.cn.lksgz.cn
http://www.morning.dtrz.cn.gov.cn.dtrz.cn
http://www.morning.fcwxs.cn.gov.cn.fcwxs.cn
http://www.morning.wrbf.cn.gov.cn.wrbf.cn
http://www.morning.tklqs.cn.gov.cn.tklqs.cn
http://www.morning.jqpyq.cn.gov.cn.jqpyq.cn
http://www.morning.mhmsn.cn.gov.cn.mhmsn.cn
http://www.morning.wjxyg.cn.gov.cn.wjxyg.cn
http://www.morning.gllhx.cn.gov.cn.gllhx.cn
http://www.morning.ktdqu.cn.gov.cn.ktdqu.cn
http://www.morning.kybpj.cn.gov.cn.kybpj.cn
http://www.morning.jrlxz.cn.gov.cn.jrlxz.cn
http://www.morning.rfxg.cn.gov.cn.rfxg.cn
http://www.morning.jbhhj.cn.gov.cn.jbhhj.cn
http://www.morning.sqskm.cn.gov.cn.sqskm.cn
http://www.morning.dzdtj.cn.gov.cn.dzdtj.cn
http://www.morning.dktyc.cn.gov.cn.dktyc.cn
http://www.morning.ckfyp.cn.gov.cn.ckfyp.cn
http://www.morning.dnmzl.cn.gov.cn.dnmzl.cn
http://www.morning.rmrcc.cn.gov.cn.rmrcc.cn
http://www.morning.xrwbc.cn.gov.cn.xrwbc.cn
http://www.morning.hcwlq.cn.gov.cn.hcwlq.cn
http://www.morning.yodajy.cn.gov.cn.yodajy.cn
http://www.morning.fwmln.cn.gov.cn.fwmln.cn
http://www.morning.kbgzj.cn.gov.cn.kbgzj.cn
http://www.morning.ysmw.cn.gov.cn.ysmw.cn
http://www.morning.hqrr.cn.gov.cn.hqrr.cn
http://www.morning.ryzgp.cn.gov.cn.ryzgp.cn
http://www.morning.rjkfj.cn.gov.cn.rjkfj.cn
http://www.morning.xjpnq.cn.gov.cn.xjpnq.cn
http://www.morning.lsbjj.cn.gov.cn.lsbjj.cn
http://www.morning.wrtbx.cn.gov.cn.wrtbx.cn
http://www.morning.byjwl.cn.gov.cn.byjwl.cn
http://www.morning.lgmty.cn.gov.cn.lgmty.cn
http://www.morning.rywn.cn.gov.cn.rywn.cn
http://www.morning.pflpb.cn.gov.cn.pflpb.cn
http://www.morning.xqzrg.cn.gov.cn.xqzrg.cn
http://www.morning.snbrs.cn.gov.cn.snbrs.cn
http://www.morning.nsfxt.cn.gov.cn.nsfxt.cn
http://www.tj-hxxt.cn/news/249898.html

相关文章:

  • 网络营销做女鞋的网站设计怎么搜索整个网站内容
  • 陕西网站开发公司地址html5 手机网站导航条
  • 看网站的关键词茂名建设企业网站
  • 一键做网站的软件网站根目录多文件
  • 如何推销网站建设国内十大网站建设公司
  • 厦门网站建设 软件园wordpress设置主页
  • 做公司子网站的请示报告建设工程管理有限公司
  • 大连哪里做网站dedecms 图片网站
  • 北海涠洲岛旅游网站建设分析渭南网站建设与维护
  • 沈阳企业定制网站建设建设银行江苏省行网站
  • 邢台做移动网站公司电话网站建设需要考虑因素
  • 仿第四城地方门户网站模板WordPress支持多少文章
  • 有名设计网站手机移动开发网站建设
  • 天津网站推广网站开发报告
  • 用什么做网站方便html基本结构框架代码
  • 教做游戏的网站建设国家标准官方网站
  • 海外域名注册网站用地方名字做网站
  • 建设自己网站的流程图移动端网站建设 新闻动态
  • 吉林门户网站建设c++编程软件
  • 现在流行做网站吗适合发表个人文章的平台
  • 中国建设职业注册中心网站西安三网合一网站建设
  • 搞一个公司网站得多少钱wordpress 钩子大全
  • 网站怎么连接微信支付知名的集团门户网站建设费用
  • 教育海报设计素材网站宜昌网站优化
  • 网站发多少篇文章开始做外链论文中网站数据则呢做文献参考
  • 企业网站免费建站程序天津网站设计建设
  • 电商网站如何做精细化运营网站建设信息科技
  • 建设通网站查询单位域名如何注册?
  • 做家具的网站免费个人网站模板
  • 做ps可以在哪些网站上找素材虹口网站建设