应届生小祖参加了个需求分析会回来后跟我说被产品怼了一句:

"不就是写SQL吗,要那么久吗"

我去,欺负我小弟,这我肯定不能忍呀,于是我写了一篇文章发在了公司的wiki

贴出来给大家看看,省略了一些敏感的内容。当然内部版言辞也会温和一点,嘻嘻

在哪里写SQL?

这个问题高级点的问法是用哪种SQL引擎?

SparkSQL、Hive、Phoenix、Drill、Impala、Presto、Druid、Kylin (这里的SQL引擎是广义的,大家不必钻牛角尖)

我用一句话概括下这几个东西,先不管你们现在看不看得懂:

  • Hive:把sql解析后用MapReduce跑
  • SparkSQL:把sql解析后用Spark跑,比hive快点
  • Phoenix:一个绕过了MapReduce运行在HBase上的SQL框架
  • Drill/Impala/Presto 交互式查询,都是类似google Dremel的东西,区别这里就不说了
  • Druid/Kylin olap预计算系统

这就涉及到更多的问题了,对这些组件不熟悉的同学可能调研过程就得花上一个多月。

比如需求是实时计算还是离线分析?

数据是增量数据还是静态数据?

数据量有多大?

能容忍多长的响应时间?

总之,功能、性能、稳定性、运维难度、开发难度这些都是要考虑的

对哪里的数据执行SQL?

你以为选完引擎就可以开写了?too naive!

上面提到的大部分工具都仅仅是查询引擎,存储呢?

“啥,为啥还要管存储?”

不管存储,那是要把PB级的数据存在mysql是吧...

关系型数据库像mysql这种,查询引擎和存储是紧耦合的,这其实是有助于优化性能的,你不能把它们拆分开来。

而大数据系统SQL引擎一般都是独立于数据存储系统,获得了更大的灵活性。这都是出于数据量和性能的考虑

这涉及到的问题就更多了。先要搞清楚引擎支持对接哪些存储,怎么存查询起来方便高效。

可以对接的持久化存储我截个图,感受一下(这还只是一小部分)

用哪种语法写SQL?

你以为存储和查询搞定就可以开写了?你以为全天下的sql都是一样的?并不是!

并不是所有的引擎都支持join

并不是所有的distinct都是精准计算的

并不是所有的引擎都支持limit分页

还有,如果处理复杂的场景经常会需要自定义sql方法,那如何自定义呢,写代码呀

举几个简单而常见的栗子:

见过这样的sql吗?

select `user`["user_id"] from tbl_test ;

见过这种操作吗?

insert overwrite table tbl_test select * from tbl_test  where id>0; 

卧槽,这不会锁死吗?hive里不会,但是不建议这样做。

还能这么写

from tbl_test insert overwrite table tbl_test select *   where id>0; 

怎么用更高效的方式写SQL?

好了,全都搞定了,终于可以开始愉快地写SQL了。

写SQL的过程我用小祖刚来公司时的一句话来总结:

“卧槽,这条SQL有100多行!”

事实表,维表的数据各种join反复join,这还不算完还要再join不同时间的数据,还要$#@%^$#^...

不说了,写过的人一定知道有多恶心

(此处省略100多行字)

终于写完了,千辛万苦来到这一步,满心欢喜敲下回车...

时间过去1分钟...

10分钟...

30分钟...

1小时...

2小时...

......

别等了,这样下去是不会有结果的。

老实看日志吧,看日志也是一门很大的学问。

首先你得搞清楚这个sql是怎么运行,底层是mapReduce还是spark还是解析成了其他应用的put、get等接口;

然后得搞清楚数据是怎么走的,有没有发生数据倾斜,怎么优化

同时你还得注意资源,cpu、内存、io等

最后

产品又来需求了,现有系统还无法实现,上面四步再折腾一遍...

推荐阅读

大数据需要学什么?
zookeeper-操作与应用场景-《每日五分钟搞定大数据》
zookeeper-架构设计与角色分工-《每日五分钟搞定大数据》
zookeeper-paxos与一致性-《每日五分钟搞定大数据》
zookeeper-zab协议-《每日五分钟搞定大数据》

大数据不就是写SQL吗?的更多相关文章

  1. 应大数据时代而写了个磁力搜索的网页- WWW.MOVIH.COM 磁力

    应大数据时代而写了个磁力搜索的网页- 索马里搜索磁力 http://www.,movih.com/ BT磁力示例网站:WWW.MOVIH.COM 采用分布式架构: JAVA系统:JBOSS7+EJB3 ...

  2. 大数据量下的SQL Server数据库自身优化

    原文: http://www.d1net.com/bigdata/news/284983.html 1.1:增加次数据文件 从SQL SERVER 2005开始,数据库不默认生成NDF数据文件,一般情 ...

  3. 千万级大数据的Mysql数据库SQL语句优化

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  4. 大数据技术 - 为什么是SQL

    在大数据处理以及分析中 SQL 的普及率非常高,几乎是每一个大数据工程师必须掌握的语言,甚至非数据处理岗位的人也在学习使用 SQL.今天这篇文章就聊聊 SQL 在数据分析中作用以及掌握 SQL 的必要 ...

  5. 大数据学习资料之SQL与NOSQL数据库

    这几年的大数据热潮带动了一激活了一大批hadoop学习爱好者.有自学hadoop的,有报名培训班学习的.所有接触过hadoop的人都知道,单独搭建hadoop里每个组建都需要运行环境.修改配置文件测试 ...

  6. (转)大数据量下的SQL Server数据库优化

     在SQL Server中,默认MDF文件初始大小为5MB,自增为1MB,不限增长,LDF初始为1MB,增长为10%,限制文件增长到一定的数目:一般设计中,使用SQL自带的设计即可,但是大型数据库设计 ...

  7. 大数据时代下的SQL Server第三方负载均衡方案----Moebius测试

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 架构原理(Architecture) 测试环境(Environment) 安装Moebius( ...

  8. (转)大数据时代下的SQL Server第三方负载均衡方案----Moebius测试

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 架构原理(Architecture) 测试环境(Environment) 安装Moebius( ...

  9. 大数据学习——hive的sql练习题

    ABC三个hive表 每个表中都只有一列int类型且列名相同,求三个表中互不重复的数 create table a(age int) row format delimited fields termi ...

随机推荐

  1. 章节二、4-String以及StringBuffer和StringBuilder的对比

    1.String---字符串常量 字符串是一个常量,一旦被初始化就不会被改变,它存储在字符串常量池中,每一个字符串对象在java中都是线程安全的.   2.StringBuffer---字符串变量 是 ...

  2. 【数据分析】线性回归与逻辑回归(R语言实现)

    文章来源:公众号-智能化IT系统. 回归模型有多种,一般在数据分析中用的比较常用的有线性回归和逻辑回归.其描述的是一组因变量和自变量之间的关系,通过特定的方程来模拟.这么做的目的也是为了预测,但有时也 ...

  3. Python minidom模块(DOM写入和解析XML)

    一.DOM写XML文件 #导入minidom from xml.dom import minidom # 1.创建DOM树对象 dom=minidom.Document() # 2.创建根节点.每次都 ...

  4. PHP的匿名函数和闭包

    匿名函数 // Example1 $func = function( $param ) { echo $param; }; $func( 'some string' );//输出:some strin ...

  5. The operation could not be performed because the OLE DB provider 'SQLOLEDB' was unable to begin a distributed transaction

    今天遇到一起关于分布式事务错误的案例,如下所示,执行SQL脚本时报错, 错误信息具体如下所示: [OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中 ...

  6. Spring MVC 请求映射 (二)

    完整的项目案例: springmvc.zip 目录 实例 项目结构: 一.配置web.xml <?xml version="1.0" encoding="UTF-8 ...

  7. solidity高级理论(三):时间单位与view

    solidity高级理论(三):时间单位与view 关键字:时间单位.view.Gas优化 solidity使用自己的本地时间单位 变量 now 将返回当前的unix时间戳(自1970年1月1日以来经 ...

  8. CMM/CMMI的基本概念

    "CMM是指“能力成熟度模型”,其英文全称为Capability Maturity Model for Software,英文缩写为SW-CMM,简称CMM. 它是对于软件组织在定义.实施. ...

  9. Lua不显示小数点0的部分

    我的环境:Unity3D 5.3.7p4 XLua版本v2.1.6 基于Lua5.3 (https://github.com/Tencent/xLua) 在Lua中数字不区分整型或浮点型,所有都是nu ...

  10. 7. svg学习笔记-图案和渐变

    之前,我们仅仅使用纯色来为图形填充颜色和绘制轮廓,除此之外,我们还可以使用图案和渐变来填充图形或者是绘制轮廓. 图案 图案的效果类似于,在网页中给一个元素指定背景图像,当背景图像的尺寸小于元素的尺寸的 ...