从0开始学大数据
李智慧
同程艺龙交通首席架构师,前Intel大数据架构师,《大型网站技术架构》作者
立即订阅
14333 人已学习
课程目录
已完结 46 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 为什么说每个软件工程师都应该懂大数据技术?
免费
预习模块 (3讲)
预习 01 | 大数据技术发展史:大数据的前世今生
预习 02 | 大数据应用发展史:从搜索引擎到人工智能
预习 03 | 大数据应用领域:数据驱动一切
模块一 Hadoop大数据原理与架构 (7讲)
04 | 移动计算比移动数据更划算
05 | 从RAID看垂直伸缩到水平伸缩的演化
06 | 新技术层出不穷,HDFS依然是存储的王者
07 | 为什么说MapReduce既是编程模型又是计算框架?
08 | MapReduce如何让数据完成一次旅行?
09 | 为什么我们管Yarn叫作资源调度框架?
10 | 模块答疑:我们能从Hadoop学到什么?
模块二 大数据生态体系主要产品原理与架构 (7讲)
11 | Hive是如何让MapReduce实现SQL操作的?
12 | 我们并没有觉得MapReduce速度慢,直到Spark出现
13 | 同样的本质,为何Spark可以更高效?
14 | BigTable的开源实现:HBase
15 | 流式计算的代表:Storm、Flink、Spark Streaming
16 | ZooKeeper是如何保证数据一致性的?
17 | 模块答疑:这么多技术,到底都能用在什么场景里?
模块三 大数据开发实践 (8讲)
18 | 如何自己开发一个大数据SQL引擎?
19 | Spark的性能优化案例分析(上)
20 | Spark的性能优化案例分析(下)
21 | 从阿里内部产品看海量数据处理系统的设计(上):Doris的立项
22 | 从阿里内部产品看海量数据处理系统的设计(下):架构与创新
23 | 大数据基准测试可以带来什么好处?
24 | 从大数据性能测试工具Dew看如何快速开发大数据系统
25 | 模块答疑:我能从大厂的大数据开发实践中学到什么?
模块四 大数据平台与系统集成 (6讲)
26 | 互联网产品 + 大数据产品 = 大数据平台
27 | 大数据从哪里来?
28 | 知名大厂如何搭建大数据平台?
29 | 盘点可供中小企业参考的商业大数据平台
30 | 当大数据遇上物联网
31 | 模块答疑:为什么大数据平台至关重要?
模块五 大数据分析与运营 (5讲)
32 | 互联网运营数据指标与可视化监控
33 | 一个电商网站订单下降的数据分析案例
34 | A/B测试与灰度发布必知必会
35 | 如何利用大数据成为“增长黑客”?
36 | 模块答疑:为什么说数据驱动运营?
模块六 大数据算法 (6讲)
37 | 如何对数据进行分类和预测?
38 | 如何发掘数据之间的关系?
39 | 如何预测用户的喜好?
40 | 机器学习的数学原理是什么?
41 | 从感知机到神经网络算法
42 | 模块答疑:软件工程师如何进入人工智能领域?
智慧写给你的寄语 (1讲)
所有的不确定都是机会——智慧写给你的新年寄语
结束语 (2讲)
结束语 | 未来的你,有无限可能
第2季回归丨大数据之后,让我们回归后端
从0开始学大数据
登录|注册

18 | 如何自己开发一个大数据SQL引擎?

李智慧 2018-12-08
从今天开始我们就进入了专栏的第三个模块,一起来看看大数据开发实践过程中的门道。学习一样技术,如果只是作为学习者,被动接受总是困难的。但如果从开发者的视角看,很多东西就豁然开朗了,明白了原理,有时甚至不需要学习,顺着原理就可以推导出各种实现细节
各种知识从表象上看,总是杂乱无章的,如果只是学习这些繁杂的知识点,固然自己的知识面是有限的,并且遇到问题的应变能力也很难提高。所以有些高手看起来似乎无所不知,不论谈论起什么技术,都能头头是道,其实并不是他们学习、掌握了所有技术,而是他们是在谈到这个问题的时候,才开始进行推导,并迅速得出结论。
我在 Intel 的时候,面试过一个交大的实习生,她大概只学过一点 MapReduce 的基本知识,我问她如何用 MapReduce 实现数据库的 join 操作,可以明显看出她没学习过这部分知识。她说:我想一下,然后盯着桌子看了两三秒的时间,就开始回答,基本跟 Hive 的实现机制一样。从她的回答就能看出这个女生就是一个高手,高手不一定要很资深、经验丰富,把握住了技术的核心本质,掌握了快速分析推导的能力,能够迅速将自己的知识技能推进到陌生的领域,就是高手。
这也是我这个专栏的目的,讲述大数据技术的核心原理,分享一些高效的思考和思维方式,帮助你构建起自己的技术知识体系。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《从0开始学大数据》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(17)

  • 三木子
    Oracle会有走向衰落吗?

    作者回复: 会,正在走向

    2018-12-09
    17
  • 纯洁的憎恶
    基于SQL的大数据仓库引擎panthera的核心任务是把SQL语义与Hive AST对应起来。难点是SQL的语义远比Hive AST丰富,而幸运的事SQL丰富的表意逻辑主要源于它的嵌套子语句,这在Hive AST中是不存在的。但是SQL的嵌套子语句可以等价于若干jion操作。

    为了在工程上降低实现难度,特意为每个语法点设计一个对象(类),这就将复杂问题分解为无数个小步骤,可以持续交付,不用长期等待,从而将不可能有条件的变为可能。而且每个类的代码十分简洁,遇到问题也便于各个击破。

    作者回复: 清晰👍🏻

    2018-12-17
    11
  • 欧嘉权Felix
    如果用statement jdbc会简单拼接字符串然后作为sql执行
    preparedstatement就会进行预编译 对其中的换行符等字符做转义 对注入的sql会起到混淆的作用
    mybatis这些orm框架也是基于preparedstatement mybatis尽量使用#占位符
    2018-12-08
    10
  • galen
    因为SQL语句在程序运行前已经进行了预编译,在程序运行时第一次操作数据库之前,SQL语句已经被数据库分析,编译和优化,对应的执行计划也会缓存下来并允许数据库已参数化的形式进行查询,当运行时动态地把参数传给PreprareStatement时,即使参数里有敏感字符如 or '1=1'也数据库会作为一个参数一个字段的属性值来处理而不会作为一个SQL指令,如此,就起到了SQL注入的作用了
    2018-12-08
    6
  • 杰之7
    从这篇文章开始,大数据技术的体系架构知识就告一段落,但并不意味着已经完全掌握,我需要不断的回顾体系架构原理,这样才会有可能沿着这个思路有自己的一点拓展。回到本篇内容,如何自己开发SQL引擎,由于Hive语法元素少于标准SQL,且不支持复杂的嵌套子查询,所以开发的难点就是如何将复杂嵌套消除转化成标准SQL。在老师讲述的过程中,主要通过装饰模式等价转化类的构造,对于每一种新的语法通过开发新的Transformer类,然后通过组合模式将抽象语法树AST进行遍历,最后转化成Hive格式的抽象语法树。通过这样的整个过程,就完成的对Hive语法解析器的替换,保留了Hive语义分析器。通过本节的学习,我相信老师说的这套思路,那些技术厉害的人不是掌握了每一种技术,而是掌握了技术背后的体系和原理,当有新的技术出现时,同样先去思考技术背后的原理是什么,这样就算没有参与其中的技术,也会新的技术有一个好的认识。
    2018-12-09
    4
  • 周翔
    预编译就是sql命令的模板归模板,参数归参数,参数就不会混合到原sql,改变原有的sql语句和执行逻辑。除了数据访问框架本身prepare statement功能,还可以从服务层接收参数就可以屏蔽。
    2018-12-09
    4
  • 明亮
    可以推荐一些SQL解析的来源产品和资料吗
    2018-12-20
    2
  • Well_Ksun
    老师能简单聊聊presto吗?也是faceboook开源出来的。据说AWS 的 Athena 就是基于 Presto 的产品。
    2018-12-17
    2
  • Oliver
    保证用户输入的内容仅仅且只能作为查询条件,涉及一些字符转义操作
    2018-12-08
    2
  • 毛毛
    PreparedStatement会先初始化SQL,语句中只有部分变量可以被“?”替代,所以sql注入的攻击方式无效。
    2018-12-08
    2
  • cwx0220
    正常情况下,当http请求参数带有sql语句的条件时,在 SQL 注入中,参数值作为 SQL 指令的一部分,会被数据库进行编译/解释执行。当使用了 PreparedStatement,带占位符 ( ? ) 的 sql 语句只会被编译一次,之后执行只是将占位符替换为参数值,并不会再次编译/解释,因此从根本上防止了 SQL 注入问题。
    2019-03-04
    1
  • 反应慢
    之前有一段时间在学习函数式编程,和sql一样属于命令式编程,所以感觉以函数去解析sql是水到渠成的事情。不过至今没有动手去实现一下,比较遗憾

    作者回复: 赞,spark也往这个方向走。

    2018-12-14
    1
  • 王三金
    https://github.com/lealone

    来看看我们桂林的大才子zhh-4096,一个人开发6年的列锁极数据库,之前也去淘宝做个一两年数据库产品的。
    2019-11-08
  • godtrue
    猜测数据库引擎会通过某种方式,把参数就用作参数而不会作为SQL语句去执行。
    凡事常用带入创造者的方式去思考,确实是个好方法,长期训练也许,真能做到庖丁解牛的效果。
    2019-09-28
  • 北京知府
    private static SqlASTTransformer tf =
          new RedundantSelectGroupItemTransformer(
          new DistinctTransformer(
          new GroupElementNormalizeTransformer(
          new PrepareQueryInfoTransformer(
          new OrderByTransformer(
          new OrderByFunctionTransformer(
          new MinusIntersectTransformer(
          new PrepareQueryInfoTransformer(
          new UnionTransformer(
          new Leftsemi2LeftJoinTransformer(
          new CountAsteriskPositionTransformer(
          new FilterInwardTransformer(
          //use leftJoin method to handle not exists for correlated
          new CrossJoinTransformer(
          new PrepareQueryInfoTransformer(
          new SubQUnnestTransformer(
          new PrepareFilterBlockTransformer(
          new PrepareQueryInfoTransformer(
          new TopLevelUnionTransformer(
          new FilterBlockAdjustTransformer(
          new PrepareFilterBlockTransformer(
          new ExpandAsteriskTransformer(
          new PrepareQueryInfoTransformer(
          new CrossJoinTransformer(
          new PrepareQueryInfoTransformer(
          new ConditionStructTransformer(
          new MultipleTableSelectTransformer(
          new WhereConditionOptimizationTransformer(
          new PrepareQueryInfoTransformer(
          new InTransformer(
          new TopLevelUnionTransformer(
          new MinusIntersectTransformer(
          new NaturalJoinTransformer(
          new OrderByNotInSelectListTransformer(
          new RowNumTransformer(
          new BetweenTransformer(
          new UsingTransformer(
          new SchemaDotTableTransformer(
          new NothingTransformer())))))))))))))))))))))))))))))))))))));
    这个类在使用的时候该有多麻烦啊?

    作者回复: 事实上是非常简单~~ 将非常复杂的SQL语法转换解耦合,有兴趣建议看看更详细的代码

    2019-05-12
  • 小老鼠
    Hive QL也支持预编译吗?
    2019-01-17
  • 桃园悠然在
    请问老师,如果目前手头使用的hive可以支持嵌套子查询,是否说明已经定制优化过了?
    2018-12-29
收起评论
17
返回
顶部