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

SQL解决了什么问题

SQL的中文翻译为:结构化查询语言。这里面有三层含义:首先这是一门编程语言;其次,这是一门查询语言;最后,这是在结构化数据上做查询的语言。结构化数据就是数据库里的二维表,不了解数据库的读者可以把它看做 Excel 里面的表格。虽然 SQL可以解决查询问题,但是 SQL 并不仅仅只提供查询的功能,它还可以对表进行增加、更新、删除等操作。

SQL 的主要应用场景有两个:

第一,传统数据库的增删改查。以查询举例,App 的某个页面展示的数据一般存放在传统数据库中,通过 SQL 可以读取数据库中的内容用于展示。

第二,大数据统计分析。比如,统计 App 的日活,这时候 SQL 的作用是查询和计算。大数据场景几乎不会对表中的记录更新和删除。

SQL的优势

语法简单

SQL 的语法相对于其他编程语言非常简单,常用的关键字也就几个,selectfromwherejoinif 等。没有像 Java、C++ 等编程语言定义的类、对象、继承之类的复杂概念。

表达能力强

完成同样的统计功能,SQL 代码量较少。举一个大数据统计常用的例子 WordCount,之前我写的使用 MapReduce 写的代码大概 40 行。下面我们用 SQL 写一下看看多么简单,你会发现so easy,如果看不懂可以暂时忽略,后续有讲解。

select word, count(1)
from (
select * from tb lateral view explode(split(words, ' ')) words_tb as word
) tmp
group by word
;

通过如上可以看到只用了 5 行代码就完成了 WordCount,SQL 的表达力强,可以大大减少代码量。

容易理解

我们很容易将 SQL 代码映射到二维表中的数据,比如上面例子中的代码,第一个括号里面的 select ... from 代表拿到了 tb 这个表的数据并做转换;第二个 select ... from 相当于基于第一个括号里生成的数据再进行操作。所以 SQL 不同操作的代码其实就是对应着二维表的不断变换,相对容易理解。

谁在用SQL

我觉得未来只要跟数据相关的从业者都应该掌握 SQL,在编程越来越普及的背景下,SQL 并不是程序员专有技能。那么目前市场环境中有哪些职位应该掌握 SQL。

  • 大数据 / BI 工程师:可以说是数据直接提供方,将采集的数据进行合理的组织,创建二维表存储数据,设计数据仓库模型,以便分析团队能够便捷地、快速地获取到想要的数据。
  • 机器学习及数据挖掘工程师:做挖掘的数据很可能来自数据仓库,使用 SQL 统计可以非常方便地了解数据、分析数据,与数据团队之间沟通成本更低。
  • 数据分析师:有不少非程序员出身,但是为了跟大数据团队配合也需要使用 SQL 并且需要懂一些大数据处理方便的专业知识。我接触过不少数据分析师,他们的 SQL 水平参差不齐, 有的根本不写 SQL,主要用 R 、Python 或 Excel 进行分析。而有些人能够熟练掌握 SQL 并且也了解一大数据处理技术,这样跟数据团队配合的会更好。
  • 产品经理和运营:产品和运营会经常进行数据分析,他们分析的数据最常见的来源是 BI 团队提供的报表,但这种方式非常不灵活。因此对于产品和运营如果能掌握 SQL 自助地分析会大大提升分析效率。我有个朋友在美团做产品经理,他们会使用 SQL 并且能够为 BI 团队挡下大部分无用的数据需求。当然现在一些 BI 团队也会提供各种可视化工具来满足业务方的数据需求,这只是一个折中的方案。建议与数据分析相关岗位的同学都掌握 SQL ,学习 SQL 并不比熟练 Excel 操作更复杂。

大数据中的 SQL

目前比较火的大数据框架比如 MapReduce(Hive)、Spark、Flink 都支持 SQL。在大数据中 SQL 应用主要分两种:一种是周期性的统计任务,另一种是分析任务。前者对实时性要求不高,一般用 Hive 或者 Spark 批处理任务去完成。对于后者偏重分析,需要快速的洞察数据得出结论,这种任务可以使用 Hive 来完成,如果需要更高的实时性,交互性要求可以使用 Kylin 等多维分析框架。

以上便是大数据处理和分析中 SQL 扮演的角色以及地位。SQL 应用是建立在数据库之上,对于大数据目前应用比较广泛的是 Hive, Hive 的安装简述如下。

安装Hive

安装 Hive 需要基于 Hadoop,Hadoop 的安装在“大数据技术 - 学习之路(一)”中已经介绍过,本次 Hive 的安装也是基于之前的环境进行。Hadoop 2.x.y 版本对应 Hive 也是 2.x.y 版本,我们可以下载 apache-hive-2.3.4-bin.tar.gz 文件进行安装。Hive 的安装相对简单,可以对照官网进行,主要步骤如下:

解压apache-hive-2.3.4-bin.tar.gz

tar -zxvf apache-hive-2.3.-bin.tar.gz
mv apache-hive-2.3.-bin hive-2.3.

配置 HIVE_HOME 环境变量

vi /etc/profile
#增加并修改以下内容
HIVE_HOME=/work/software/hive-2.3.
export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HIVE_HOME/bin:$PATH
source /etc/profile

在 HDFS 创建Hive数据库的路径(修改数据库默认路径: hive.metastore.warehouse.dir)

hadoop fs -mkdir       /tmp
hadoop fs -mkdir /user/hive/warehouse
hadoop fs -chmod g+w /tmp
hadoop fs -chmod g+w /user/hive/warehouse

初始化 meta 数据库

# Hive 将表的元数据信息(表名、列名及数据类型等)存储在关系型数据库中,目前支持 mysql 和 derby,自己学习使用可以用 derby,生产环境建议用 mysql
schematool -dbType derby -initSchema
# 执行成功后会看到在 hive-2.3.4 目录下有个 metastore_db 目录,存放元数据信息

如果不进行该操作可能会报以下错误

FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

启动 Hive 客户端,直接运行 hive 命令即可

[root@hadoop0 hadoop-2.9.]# hive
which: no hbase in (/work/software/jdk1..0_151/bin:/work/software/hadoop-2.9./bin:/work/software/hive-2.3./bin:/work/software/jdk1..0_151/bin:/work/software/hadoop-2.9./bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/work/software/hive-2.3./lib/log4j-slf4j-impl-2.6..jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/work/software/hadoop-2.9./share/hadoop/common/lib/slf4j-log4j12-1.7..jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory] Logging initialized using configuration in jar:file:/work/software/hive-2.3./lib/hive-common-2.3..jar!/hive-log4j2.properties Async: true
Hive-on-MR is deprecated in Hive and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive .X releases.
hive>

由于元数据目录在 hive-2.3.4 目录下的 metastore_db 目录,因此后续启动 hive 客户端都要在 hive-2.3.4 目录下

验证 hive

hive> show databases;
OK
default
Time taken: 9.366 seconds, Fetched: row(s)

说明我们可以正常使用 hive 了

总结

这篇文章主要介绍了数据统计与分析过程中 SQL 所扮演的角色,以及在目前大数据技术支持 SQL 的数据框架,最后简单介绍了 Hive 的安装。后续我们会继续介绍 SQL 的语法以及背后的大数据数据技术。

如有疑问请扫描右上方二维码直接与我交流

大数据技术 - 为什么是SQL的更多相关文章

  1. 大数据技术 vs 数据库一体机[转]

    http://blog.sina.com.cn/s/blog_7ca5799101013dtb.html 目前,虽然大数据与数据库一体机都很火热,但相当一部分人却无法对深入了解这两者的本质区别.这里便 ...

  2. 大数据技术生态圈形象比喻(Hadoop、Hive、Spark 关系)

    [摘要] 知乎上一篇很不错的科普文章,介绍大数据技术生态圈(Hadoop.Hive.Spark )的关系. 链接地址:https://www.zhihu.com/question/27974418 [ ...

  3. 从大数据技术变迁猜一猜AI人工智能的发展

    目前大数据已经成为了各家互联网公司的核心资产和竞争力了,其实不仅是互联网公司,包括传统企业也拥有大量的数据,也想把这些数据发挥出作用.在这种环境下,大数据技术的重要性和火爆程度相信没有人去怀疑. 而A ...

  4. TOP100summit:【分享实录-WalmartLabs】利用开源大数据技术构建WMX广告效益分析平台

    本篇文章内容来自2016年TOP100summitWalmartLabs实验室广告平台首席工程师.架构师粟迪夫的案例分享. 编辑:Cynthia 粟迪夫:WalmartLabs实验室广告平台首席工程师 ...

  5. Google大数据技术架构探秘

    原文地址:https://blog.csdn.net/bingdata123/article/details/79927507 Google是大数据时代的奠基者,其大数据技术架构一直是互联网公司争相学 ...

  6. 开源大数据技术专场(下午):Databircks、Intel、阿里、梨视频的技术实践

    摘要: 本论坛第一次聚集阿里Hadoop.Spark.Hbase.Jtorm各领域的技术专家,讲述Hadoop生态的过去现在未来及阿里在Hadoop大生态领域的实践与探索. 开源大数据技术专场下午场在 ...

  7. 开源大数据技术专场(上午):Spark、HBase、JStorm应用与实践

    16日上午9点,2016云栖大会“开源大数据技术专场” (全天)在阿里云技术专家封神的主持下开启.通过封神了解到,在上午的专场中,阿里云高级技术专家无谓.阿里云技术专家封神.阿里巴巴中间件技术部高级技 ...

  8. 【学习笔记】大数据技术原理与应用(MOOC视频、厦门大学林子雨)

    1 大数据概述 大数据特性:4v volume velocity variety value 即大量化.快速化.多样化.价值密度低 数据量大:大数据摩尔定律 快速化:从数据的生成到消耗,时间窗口小,可 ...

  9. 大数据技术之Sqoop

    大数据技术之Sqoop  一.Sqoop简介 Apache Sqoop(TM)是一种旨在有效地在Apache Hadoop和诸如关系数据库等结构化数据存储之间传输大量数据的工具. Sqoop于2012 ...

随机推荐

  1. js 数组 添加或删除 元素 splice 创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素 filter

    里面可以用 箭头函数 splice         删除 增加 数组 中元素 操作数组 filter 创建新数组  检查指定数组中符合条件的所有元素

  2. Python的WSGI(Web Server Gateway Interface)服务器

    Python的WSGI(Web Server Gateway Interface)服务器 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任.

  3. Spring Boot Admin 详解(Spring Boot 2.0,基于 Eureka 的实现)

    原文:https://blog.csdn.net/hubo_88/article/details/80671192 Spring Boot Admin 用于监控基于 Spring Boot 的应用,它 ...

  4. PAT 乙级 1032.挖掘机技术哪家强 C++/Java

    题目来源 为了用事实说明挖掘机技术到底哪家强,PAT 组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第 1 行给出不超过 1 的正整数 N,即参赛人数.随后 ...

  5. ajax 简单例子

    Html 代码: <html> <body> <div id="myDiv"><h3>Let AJAX change this te ...

  6. flask实战-个人博客-电子邮件支持

    电子邮件支持 因为博客要支持评论,所以我们需要在文章有了新评论后发邮件通知管理员.而且,当管理员回复了读者的评论后,也需要发送邮件提醒读者. 为了方便读者使用示例程序,personalBlog中仍然使 ...

  7. java生成前端验证码+验证「kaptcha」

    1.前言 kaptcha是一个非常实用的短信验证码生成工具,通过简单配置即可实现多样化的验证码. 2.引入依赖 <!--第三方验证码--><dependency>    < ...

  8. Margin和padding失效

    太久不写原生果然不行,Margin和padding对div有效,对span失效,原因就不解释了(元素性质,块状之类的)

  9. git crate&query&delete tag(九)

    root@vmuer-VirtualBox:/opt/myProject# git log --pretty=oneline0169b7a1c4bccb47e76711f353fd8d3864bde9 ...

  10. ESA2GJK1DH1K升级篇: 升级STM32 预热: 单片机每隔一定时间 使用 http 获取天气

    前言: 实现功能概要: STM32使用AT指令控制Wi-Fi以TCP方式连接服务器(YY天气Web服务器),然后使用http的get协议获取今天的天气数据 单片机提取今天的温度和湿度数据,把温湿度数据 ...