白话数据产品(二)——SQL入门
SQL算是大数据中最常用的语言,对于数据产品来说具备基础的SQL技能是必不可少的。
上一篇介绍了数据一般怎样抽取,然后怎么存储在数据仓库中,这一篇介绍怎么把存储好的数据提取出来。
作为数据产品,一项基础工作即是为需求方取数据,一般来说简单的取数数据产品是要兼顾的,复杂的取数才会升级到研发来取,毕竟研发们都很忙嘛,小事我们自己也可以搞定的。
一、SQL思路3分钟入门
SQL可以实现的功能很多,建表、删表、插入数据、查询数据...这里主要介绍查询数据的SQL一般写法,SQL语言的主要逻辑也是在查询语句这一块。
传统MySQL类数据库或大数据中,用到的Hive数据库是按行索引的,可以理解为一条一条的记录,而且大数据用到的HSQL其实跟传统SQL语句基本是一致的。
我们常见的对数据的处理主要是这么几种:根据条件筛选数据,将记录字段横向合并,将记录纵向合并,而这对应的就是SQL语句中的查询/子查询、各种JOIN、UNION ALL。那种看似很长很复杂的SQL代码,其实也就是这三种操作的结合体。
如下图所示:可以理解为数据库查询就是将多份数据查出来,互相关联合并,生成一张新的表单,然后可以在新的表单的基础上进行查询或者再跟其他数据关联合并。
子查询:通过条件从一张或多张表中选取出数据,你可以理解多张表的查询,其实就是像图中所示加了一些join和union all的连接操作。如果只是从一张表中查询,那么就只用关心这张表的记录结构,是否有重复记录等。
JOIN:相当于是对两份数据进行取并集、交集或其他集合方式的操作,是对两张表的字段进行了横向拼接,需要指定拼接的连接关系是用的哪个字段。比如:同一个用户,在一张表里记录了他的年龄,在另一张表里记录了他的性别,那么通过join操作就可以把这两个字段放到同一张新的表中,然后可以在这张新的表的基础上再进行其他操作。
UNION ALL:相当于是把记录纵向叠加,比如:因为数据量比较大,业务库进行了拆表操作,将1-6月份数据放在表A,将7-12月份数据放在表B。因为是同样的记录,字段都是一致的,通过union all就可以做成一张新的表,同时包含A和B的数据在里面。
这里我都没有使用具体的SQL举例,因为展开来将可能会有很大的篇幅。想要进一步深入的同学,可以去查看相关的SQL教程,按照上面介绍的思路去学习,就不会感到迷茫了。
2. HSQL vs SQL
数据工作中,既要用SQL语句去业务库里查询对比数据,又要会使用HSQL在自己的平台(一般是Hue中的Hive)中查询。两种语言除了个别函数不通用,基本是一致的。
这里举一些例子说明:
Hive中不支持not in操作,一般使用not exists代替,或者left outer join。
Hive的切片机制(上一篇有解释)导致取数需要加上条件使用的是哪天的数据。
Hive的分层机制(同样上一篇有解释)导致在不同层级进行取数,逻辑是大不相同的。ODS层同一条id记录可能有大量不同时间更新的“重复数据”,要注意进行按一定顺序的去重处理。
Hive中某些层级的数据中对时间的存储可能为unix timestamp格式,表现为一长串数字而不是常见的时间格式,需要在使用中进行转化。
Hive中可以使用多种数据计算框架,比如:MapReduce、Spark等,在不同情况下选用可以获得更好的效率。
相关阅读
作者:小九,一枚互金数据产品
本文由 @小九 原创发布于简书。未经许可,禁止转载