起点学院课程

白话数据产品(二)——SQL入门

6 评论 1.4万 浏览 108 收藏 6 分钟
15天0基础极速入门数据分析,掌握一套数据分析流程和方法,学完就能写一份数据报告!了解一下>>

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等,在不同情况下选用可以获得更好的效率。

相关阅读

白话数据产品(一):数据仓库

 

作者:小九,一枚互金数据产品

本文由 @小九 原创发布于人人都是产品经理。未经许可,禁止转载

题图来自Unsplash,基于CC0协议

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
起点学院课程
评论
评论请登录
  1. 大家期待已久的《数据产品经理实战训练营》终于在起点学院(人人都是产品经理旗下教育机构)上线啦!

    本课程非常适合新手数据产品经理,或者想要转岗的产品经理、数据分析师、研发、产品运营等人群。

    课程会从基础概念,到核心技能,再通过典型数据分析平台的实战,帮助大家构建完整的知识体系,掌握数据产品经理的基本功。

    学完后你会掌握怎么建指标体系、指标字典,如何设计数据埋点、保证数据质量,规划大数据分析平台等实际工作技能~

    现在就添加空空老师(微信id:anne012520),咨询课程详情并领取福利优惠吧!

    回复
  2. 满满干货物,已关注,等待更新,感谢。

    回复
  3. 看不懂 😥

    回复
  4. 实在

    回复
  5. 干货

    回复
    1. 谢谢 🙂

      回复