Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Byzer 语句执行原理解析

Byzer 语句执行原理解析

作者头像
用户2936994
发布于 2022-07-21 06:13:35
发布于 2022-07-21 06:13:35
52000
代码可运行
举报
文章被收录于专栏:祝威廉祝威廉
运行总次数:0
代码可运行

Byzer 语句执行原理解析

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
load excel.`./example-data/excel/hello_world.xlsx` 
where header="true" 
as hello_world;

select hello from hello_world as output;

Byzer 是按下面的方式执行的:

  1. 预处理阶段,主要是加载 include 的脚本,展开 宏函数, evaluate 变量 (例子中没有体现)
  2. 按行执行阶段,在上面的例子中,会按顺序分别执行 load/select 两条语句。

在执行一条语句的时候,系统会做两件事情:

  1. 解析和翻译语句,将其转化为可以被 Runtime 执行的 AST 树,然后存储到当前用户独占的catalog中。这个过程是很快的,因为没有涉及到实际数据的操作
  2. 判断是否要真的执行数据计算

判断条件有三个:

  1. 语句是 save 语句
  2. train/run 语句中的一部分,比如 算法类的,都是会触发执行的,而其他大部分则不会。
  3. load/select 等语句是脚本中的最后一行

所以根据前面的描述,Byzer 在执行 第一条 load 语句的时候,此时情况是:

  1. 解析和翻译成AST, 并且暂存相关信息到用户独占的 catalog 里。
  2. 因为不符合前面的三个判断条件,所以并不会真实执行数据加载操作

接着 Byzer 执行第二条 select 语句,此时情况是:

  1. 解析和翻译成 AST, 并且发现依赖了表 hello_world, 去 catalog 查找该表的AST, 然后重组成一个新的AST, 然后也保存到用户独占的 catalog 中。
  2. 符合判断条件的第三个,需要执行实际的数据,展示给用户看。

这个时候 Byzer 会将 重组后的 AST 提交给 Runtime 执行数据计算。

从上面的逻辑我们可以得出如下几个结论:

  1. 第一条语句在执行的时候,并没有触发实际数据计算,也不会将数据加载到内存里。
  2. 第二条语句会将第一条语句的 AST 集合起来,一并提交给 Runtime 执行。
  3. 尽管 Byzer 执行了两条语句,但这两条语句其实被当做了一个 AST 来执行, 等价于一条 SQL, 性能也和一条 SQL 是差不多的。

对于如下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
load excel.`./example-data/excel/hello_world.xlsx` 
where header="true" 
as hello_world;

select hello from hello_world where name="yes" as table1;

select * from table1 as output;

当我们将他们放在 notebook 里的三个 Cell 中,然后分别执行,当我们再执行第三条语句的时候

  1. 第三条语句会将第二条和第一条的 AST 都集成过来,然后形成一个新的AST 来执行。可以简单理解为三条语句被合并成了一条语句来执行。
  2. 不会因为第一条语句,第二条语句执行过了,第三条语句执行就会变快。

对于如下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
load excel.`./example-data/excel/hello_world.xlsx` 
where header="true" 
as hello_world;

select hello from hello_world where name="yes" as table1;

select * from hello_world as output;

第三条语句只依赖第一条语句产生的表, 所以第三条语句会查找到第一条语句的 AST 然后重组成新的 AST 来执行。第二条语句则仅仅生成 AST,但不会参与到最后的计算。

那如何让第三条语句变快呢? 那就是执行 save 动作,切断查找依赖:

Notebook Cell 1:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
load excel.`./example-data/excel/hello_world.xlsx` 
where header="true" 
as hello_world;

select hello from hello_world where name="yes" as table1;

save overwrite table1 as parquet.`/tmp/table1`;
load parquet.`/tmp/table1` as table2;

Notebook Cell 2:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from table2 as output;

当我们执行第二个Cell 的时候, 他会去找 table2, table2 是从 parquet 里加载的,所以此时直接从parquet 里那就好了,不需要 再到 table1 去取数据,从而触发 table1 的实际执行。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-02-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
透过现象看本质: 常见的前端架构风格和案例
原文链接:https://juejin.im/post/5d7ffad551882545ff173083#comment
桃翁
2019/09/24
1.2K0
透过现象看本质: 常见的前端架构风格和案例
基于NodeJS的全栈式开发
随着不同终端(Pad/Mobile/PC)的兴起,对开发人员的要求越来越高,纯浏览器端的响应式已经不能满足用户体验的高要求,我们往往需要针对不同的终端开发定制的版本。为了提升开发效率,前后端分离的需求越来越被重视,后端负责业务/数据接口,前端负责展现/交互逻辑,同一份数据接口,我们可以定制开发多个版本。   这个话题最近被讨论得比较多,阿里有些BU也在进行一些尝试。讨论了很久之后,我们团队决定探索一套基于NodeJS的前后端分离方案,过程中有一些不断变化的认识以及思考,记录在这里,也希望看到的同学参与讨论,
庞小明
2018/03/07
1.5K0
基于NodeJS的全栈式开发
微服务框架落地实践之路
在微服务的浪潮下,如何根据企业自身的业务特点,合理的运用开源技术落地微服务架构成为关键。本文作者认为,在实施微服务架构的过程中,结合企业自身业务特点落地的微服务架构即是最佳实践。 一、微服务架构产生的背景 近十年中,互联网给我们生活带来了翻天覆地的变化,消费者的生活方式日益数字化,人们可以在任何时间、任何地点利用网络进行购物体验,运用社交媒体进行自我表达,企业也在运用多种技术手段,发挥数字化潜力,改善客户联系,促进企业业务模式的转型。在这种背景下,互联网也好,传统企业也罢,都面临一个共同的需求:面对快速变化
yuanyi928
2018/04/02
1.1K0
微服务框架落地实践之路
从0到10亿,微信后台架构及基础设施设计与实践!
本文根据许家滔老师在2018年10月17日【第十届中国系统架构师大会(SACC2018)】现场演讲内容整理而成。 回顾微信发展历程
数据和云
2019/06/13
12.2K0
微信公众平台开发教程(三) 基础框架搭建
首先我们设计了模块层次图,当然图中只是给出一种实现方式,不局限于此。具体见下图。
Java架构师必看
2021/05/19
8540
1. Vue框架介绍
Vue相关网址 Vue官网 Vue的Github Vue的官方扩展工具 Vue的官方论坛 什么是Vue.js Vue.js 是目前最火的一个前端框架,React是最流行的一个前端框架(React除了开发网站,还可以开发手机App, Vue语法也是可以用于进行手机App开发的,需要借助于Weex) Vue.js 是前端的主流框架之一,和Angular.js、React.js 一起,并成为前端三大主流框架! Vue.js 是一套构建用户界面的框架,只关注视图层,它不仅易于上手,还便于与第三方库或既有项目整合。(
Devops海洋的渔夫
2020/02/24
9290
微服务在微信的架构实践
微服务的理念与腾讯一直倡导的“大系统小做”有很多相通之处,本文将分享微信后台架构的服务发现、通信机制、集群管理等基础能力与其上层服务划分原则、代码管理规则等。
Java架构师历程
2018/09/26
3.8K0
微服务在微信的架构实践
最流行的Spring Cloud微服务架构实践与经验总结
今天吃完饭休息的时候瞎逛知乎,突然看到这个一个问题《Spring Cloud在国内中小型公司能用起来吗?》,吸引了我的注意。仔细的看了题主的问题,发现这是一个好问题,题主经过了一番思考,并且用图形全面的将自己的疑问表达了出来,作为一个研究并使用Spring Boot和Spring Cloud近两年的程序员,看的我手痒痒不答不快呀。
全栈程序员站长
2022/07/02
7440
到底该如何搭建一个新系统
Tech 导读 本文详细介绍了搭建系统工程架构时需要关注的几个重要方面,重点围绕如何进行工程架构设计展开探讨。基于产品的价值,做出决策。并从系统工程架构的演进、技术方案的选型、系统规范共识的达成等方面入手,对实施过程中的常见问题给出了解决思路。
京东技术
2023/10/23
8560
到底该如何搭建一个新系统
低代码开发平台技术架构_一个项目的整体架构是什么
近期比较流行的低代码开发平台一词,其实也可以称作是快速开发平台。快速开发平台的目的是将可重复性的编程工作用平台实现,将开发人员从没有技术含量的增删改查开发中解放出来,做更有价值的开发工作,比如业务建模、数据库设计、流程设计、API核心开发、业务逻辑开发等工作。
全栈程序员站长
2022/09/23
1.4K0
低代码开发平台技术架构_一个项目的整体架构是什么
前后端分离后的前端时代,使用前端技术能做哪些事?
什么是前后端分离,要区分前端和后端,需要有个明确的界限。一般,用户可以直接看到的东西,都是属于前端的范畴,除了前端之外都属于后端了。
一墨编程学习
2018/10/27
2.3K0
【腾讯云开发者社区开发者大会·杭州站】借力云与小程序,揭秘新时代电商的发展法则
8月18日,云+社区开发者大会·杭州站「电商技术进化论:云与小程序之力」在杭州蘑菇街举办,此次大会邀请了业内技术大咖,深度揭秘新时代电商的技术变革与创新形式,与大家共探技术与产业转型背景下的电商如何成为时代引领者。
TVP官方团队
2019/08/22
2.8K1
【腾讯云开发者社区开发者大会·杭州站】借力云与小程序,揭秘新时代电商的发展法则
组件化——前端编程的选择
一、前端为什么要做组件化 在大型软件系统中,web应用的前后端已经实现了分离,而随着REST软件架构的发展,后端服务逐步倾向于微服务,简单来说就是将一个大型后端服务,拆分成多个小服务,它们分别部署,降低了开发的复杂性,而且提高了系统的可伸缩性。而前端方面,随着技术的发展,开发的复杂度也越来越高,传统开发模式总是存在着开发效率低,维护成本高等的弊端。 传统开发方式效率低以及维护成本高的主要原因在于很多时候是将一个系统做成了整块应用,而且往往随着业务的增长或者变更,系统的复杂度会呈现指数级的增长,经常出现的情
yuanyi928
2018/04/02
2K1
组件化——前端编程的选择
框架设计:如何基于 Egg 设计 Node 的服务框架
我想,几乎没有前端工程师会对 Node 不感兴趣,但用它适合干哪些事情,每个人的答案都不同了,比如小菜前端,我们对于 Node 的深度尝试,可以在这里找到答案:《技术栈:为什么 Node 是前端团队的核心技术栈》[1],但关于让 Node 做服务端的事情,却只有少数团队有这样的勇气。
五月君
2019/09/30
1.4K0
Java微信公众平台开发(一)--接入微信公众平台 一、验证服务器代码编写。二、服务器端验证。
今天正式开始微信公众平台的二次开发。网上有很多的及射入微信公众平台的教程。总的来说都差不多,当了解了接入流程解析,什么都显得理所当然。
用户2417870
2019/09/18
2.6K0
Java微信公众平台开发(一)--接入微信公众平台

        一、验证服务器代码编写。二、服务器端验证。
从Web演化史看前后端分离
前言 随着公有云产品的快速发展,产品线越来越多,功能越来越丰富。但在业务发展的同时,原有的前后端一体的开发模式与架构已经呈现出捉襟见肘的状况。为了能够更好地服务客户,提高产品交付效率,公有云产品组进行了前后端分离工作的探索与实践。在过去的几个月,已经成功实现多个产品的前后端分离交付,一方面提高了产品开发效率,另一方面,也更加明确了前后端开发工程师的职责,使得前后端开发工程师能够更专注于自身领域的技能提升。在本文中,我们主要介绍为什么要做前后端分离以及如何做前后端分离,具体的技术实践我们将在下一篇中介绍。
企鹅号小编
2018/03/01
3K0
从Web演化史看前后端分离
程序员进阶之路-架构的哲学
工作时间久了以后,发现对框架(Spring)的了解还停留在一个基本会使用的阶段,对它的一些设计演进并没有一个全面的认识,在笔者经历过的团队中其实还存在一大部分程序员对分层的思想还是不甚了解,更别谈对项目的架构设计分层设计理念了,其实一个架构师尤其是一个有理想有追求的架构师一定是追求其框架设计演进过程和思想,然后转变成自己的设计和架构功底,这才是我们真正能够借鉴内化的。所以说,学会项目的架构分层是一个区别一个程序员是否合格的分水岭,更是一个架构师必须要掌握的基本功。
杨源鑫
2024/07/18
2110
程序员进阶之路-架构的哲学
ASP.NET MVC5+EF6+EasyUI 后台管理系统(70)-微信公众平台开发-成为开发者
前言: 一、阅读这段系列之前,你必须花半天时间大致阅读微信公众平台的API文档,我尽量以简短快速的语言与大家分享一个过程 二、借助微信公众平台SDK Senparc.Weixin for C#,所以你必须对Senparc进行独立的了解 http://weixin.senparc.com/ 三、如果配置遇到困难,下载文章尾部源码进行参考 ---------------------------------------------------资源-------------------------------
用户1149182
2018/01/16
9080
ASP.NET MVC5+EF6+EasyUI 后台管理系统(70)-微信公众平台开发-成为开发者
基于统一开发平台的微服务架构转型升级之路 | 某国有大型银行案例
某银行是一家国有大型银行,从2016年开始采用了我们的SOA开发平台作为基础Java开发平台。
yuanyi928
2018/11/23
2.1K0
FinClip 与 uniapp:轻应用平台与前端开发框架
简单来说,uni-app 是一款为了解决跨端开发问题所设计的前端开发框架,开发者通过 uni-app 所编写出的一套代码,可以发布到 iOS,Android,H5 平台之中。
Onegun
2022/01/05
1.6K0
FinClip 与 uniapp:轻应用平台与前端开发框架
推荐阅读
相关推荐
透过现象看本质: 常见的前端架构风格和案例
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验