zoukankan      html  css  js  c++  java
  • SQL是OO的吗?

    最近写多了HiveSQL,今天偶尔改了一个很老的java程序,突然想到SQL到底是不是一种OO的语言?
    按照历史来说,SQL应该和OO几乎是出生于同一个年代,我无法得知发明SQL的人是否借鉴了OO,或者想出OO的人是否吸纳了SQL的精髓,但是某一些容易被人忽略的东西还是可以印证这两个东西的相似性!
    OO的三个基本特点:封装性/继承性/多态性对于SQL来说几乎全部拥有,特别是对于HiveSQL来说,原本的hadoop壳就是基于java,因此转义过来的类SQL更具有OO的特性。
    拿封装性来说,类就等于表,当我们在敲打table.的时候,等后续变量出来的感觉就相当于等待class.后面的变量出来;而hiveSQL提供的UDF更像是方法,遗憾的是作为单一的UDF函数不能针对表级别进行处理,如果有table.UDF的话那对于SQL的封装性来说就更趋完美。当然,table.method也不是没有–如果用streaming来做的话–对于一个table进行一个streaming操作,例如python,也就相当于对一个table进行了一个方法。
    继承性粗粗看起来没有,其实SQL也可以很好的进行继承。当我们组织中间层的时候,会构造满足tableA同时也满足tableB的表tableC,这里的tableA和tableB不也就是tableC的超类了吗?
    多态性目前我还看不出来,如果真要扯一个关系的话,UDF函数算是多态吗?可惜本身就是JAVA!或者说是hive的作者为了将hiveSQL真的做成OO而弄了这么一个玩意出来?不得而知!
    上面的这些看起来有点扯淡,其实是因为在平时用SQL的时候有很多东西因为SQL的语法不灵活导致了数据效率的降低!比如可以一道m/r做完的工作,由于SQL的局限性而必须要在两道m/r中完成的情况比比皆是!我觉得其根本原因是程序员很难通过控制SQL去控制mapreduce。如果有一天,我们将SQL变成了类java的语言,生产力一定会有很大的飞跃!我们所有表的变更都能够通过方法来实现,例如tableA.drop,tableA.create,tableA.join,再在这基础上进行重载,可以细化控制到每一个mapreduce,SQL会不会从此变成一门全新的语言呢?
  • 相关阅读:
    转【jenkins插件】
    【BZOJ】1492: [NOI2007]货币兑换Cash
    【BZOJ】3295: [Cqoi2011]动态逆序对
    【算法专题】卡特兰数(计数数列)
    【CodeForces】908 E. New Year and Entity Enumeration
    【CodeForces】698 C. LRU
    【CodeForces】908 D. New Year and Arbitrary Arrangement
    【BZOJ】4032: [HEOI2015]最短不公共子串(LibreOJ #2123)
    【BZOJ】4596: [Shoi2016]黑暗前的幻想乡
    【BZOJ】4766: 文艺计算姬
  • 原文地址:https://www.cnblogs.com/robbychan/p/3786639.html
Copyright © 2011-2022 走看看