• 三木子
    2018-12-09
    Oracle会有走向衰落吗?

    作者回复: 会,正在走向

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

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

    作者回复: 清晰👍🏻

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

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

    
     1
  • 蒙
    2020-01-14
    sql预编译,应该是将原始sql先解析成语法树,入参不能影响语法树的变化
    
    
  • GeekGay
    2019-11-08
    https://github.com/lealone

    来看看我们桂林的大才子zhh-4096,一个人开发6年的列锁极数据库,之前也去淘宝做个一两年数据库产品的。
    
    
  • godtrue
    2019-09-28
    猜测数据库引擎会通过某种方式,把参数就用作参数而不会作为SQL语句去执行。
    凡事常用带入创造者的方式去思考,确实是个好方法,长期训练也许,真能做到庖丁解牛的效果。
    
    
  • 北京知府
    2019-05-12
    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-01-17
    Hive QL也支持预编译吗?
    
    
  • 桃园悠然在
    2018-12-29
    请问老师,如果目前手头使用的hive可以支持嵌套子查询,是否说明已经定制优化过了?
    
    
我们在线,来聊聊吧