什么sql水平才能当数据分析师?

0、引子

很多人学数据分析都是从SQL入手的

刚开始接触时,大多数人会学怎么用 WHERE 筛选条件,怎么用GROUP BYCOUNT DISTINCT 等聚合函数进行聚合,这些都比较简单,绝大多数人都可以快速上手
然后,有些人会接触正则表达式(Regex)窗口函数(Window Functions),甚至开始哐哐哐地刷题(这些就是sql最难的地方了,所以刷起来确实是很有成就感的)

但是!!! 这些知识点可以学习,但并不需要掌握得非常深刻,因为:
1)大多数情况下并不需要用到这些高级技巧
2)如果真的需要,直接通过像GPT这样的工具快速生成即可,可比你自己调试调试调试快多了

实际的工作中呢?

在实际的工作中,数据分析师还需要掌握许多生产环境中的关键概念,否则仅仅会写 SQL,尤其是在处理大数据时,会遇到很多困难,特别是一些大公司,如阿里、字节、腾讯等。

1、分区(Partition)

很多人学习 SQL 都是从 MySQL 入手的,这是可以理解的,因为 MySQL 是很多数据库特性的范本,但随着大数据时代的到来,MySQL 已经无法胜任庞大的数据量。如今,最常用的数据库是 Hive。

或许你听说过 Hive,也知道它具备一些特性,例如:

  • Hive 支持多种数据存储格式,包括文本文件(TextFile)、ORC(Optimized Row Columnar)、Parquet等
  • Hive 是建立在 Hadoop 生态系统上的,所有的查询会被转化为 MapReduce 任务并分布式执行
  • Hive 是为处理海量数据而设计的,支持水平扩展。

但作为数据分析师,了解这些底层的细节并不是你的主要任务。你要做的是:如何正确地从中获取数据,以及如何高效地构建数据流

分区(Partition) 是你必须要掌握的概念。

天级表和它的兄弟们

最常见的分区方式:天级分区

天级分区指的是按日期将数据划分为不同的区块,通常会使用 YYYY-MM-DD 格式,类似于 2024-11-28。通过分区,查询时可以快速定位到需要的数据,避免扫描整个表,提升查询效率

除了天级分区,还有小时分区、周分区、月分区等。

为什么选择时间作为分区依据?

因为大数据的核心是 稳定 和 高效 的周期性数据 ETL(抽取、转换、加载)过程。
每个业务都在不断地生产数据,而大数据平台需要有效地处理这些数据,并将其按时存储,便于后续分析、训练、调用等
因此和调度相关的时间,自然而然的就成为最主要的分区依据

2、找到正确的表

在实际工作中,分析问题时,我们经常遇到这样的问题:

老用户的付费下降了,是什么原因呢?

很多分析课程和博主可能会教你这样分析:

  • 确定问题定义:老用户是哪些人,付费是指ARPPU还是ARPU
  • 确定问题范围:什么时候开始下降,哪些范围(地区/产品线/模块)内发生了下降
  • 建立假设和验证指标:上线了促销活动?发生版本迭代?出现了bug?

但实际上,这仅仅是一个分析框架!真正解决这个问题,需要提取数据作为佐证时,你还需要考虑指标的定义及计算:

哪些算老用户?
老用户的创角时间从哪里取?
历史总付费从哪里取?
近期付费从哪里取?
bug记录在哪个表?
有崩溃的明确触发记录吗?

因此,了解数据表的类型非常重要。如果带着模棱两可的认知去找一个自以为正确的表进行分析,最后往往会得出误导性结论。

全量表和增量表

全量表(f,Full):存储的是所有的历史数据,通常不会经常更新。适用于需要完整数据的场景,例如上面说的历史总付费、创角时间
增量表(i,Incremental ):只存储最新的数据变化,通常会通过增量更新的方式处理。例如用户每天付费的统计

对于需要频繁更新的数据(如交易数据、用户活跃数据等),增量表更加高效;而全量表则适用于一些历史数据的查询

数据层、应用层和维度层表

数据层表:通常是源数据表,包含最原始的数据,结构简单、无加工。
应用层表:在数据层的基础上进行汇总、清洗和加工后的表,用于具体业务分析。
维度层表:存储与业务相关的维度信息,例如用户表、产品表等。用于与事实数据表进行联接,生成更有意义的分析。

3、数据探索和边界情况

实际工作中,写 SQL 可能不是最难的部分。最难的常常是频繁遇到报错、空值、数据缺失和反常结果。这些问题通常都源于:数据中存在一些不符合预期的值。

数据探索 是指通过对数据的遍历、枚举、最值等,来理解数据的结构、分布和潜在问题。

  • 数据的完整性:每一类用户,每一个活动的数据都包括在内吗?
  • 枚举值的类型:一个活动只有一个id吗?商品有哪些类型?
  • 缺失值、重复值、极端值:计算指标用到的字段,会不会有负数、空值、或者是溢出的值?

数据探索应该是成为一种习惯,对于陌生的数据表,首先要做的不是思考指标的计算方法,而是摸清楚数据表里面的每个字段

4、数据库类型和应用场景

理想的情况下,我们应该专注于最常用的数据库,如 Hive,并结合 Spark SQL 进行高效的数据查询和分析。(实际上,很多时候你甚至不知道自己使用的是哪种引擎)
但是,了解其他常用的数据库也有助于你更好地理解不同的工作场景和选择合适的工具。

  • Clickhouse:一款非常适合 OLAP(联机分析处理)场景的数据库,以其极快的查询响应速度而著称,特别是在处理大数据时,能够提供秒级查询。它的 SQL 语法与 SparkSQL 类似,但也有一些函数和命名上的差异。
  • Starrocks:这是一款兼容 MySQL 和 Hive 的数据库,支持高效的OLAP 查询,尤其在传统行业转型中开始广泛使用。
  • PostgreSQL:PostgreSQL是一个开源的对象关系数据库管理系统,以其高性能、高扩展性和丰富的功能特性广受欢迎。它支持标准 SQL和许多扩展特性,非常适合处理复杂的数据结构和分析任务

写在最后

其实这篇文章有些跑题了,但以上内容基本都是自己工作中遇到过的一些坑。最后,回答一下标题的问题:SQL 要学到什么水平?

  • SQL 脚本够用就行:掌握基本的 WHERE 筛选、GROUP BY 聚合、WITH 临时表等常用语法。
  • 考虑数据的分区逻辑:理解数据表的分区方式,以及如何高效利用全量表、增量表等。
  • 进行数据探索和边界检查:通过数据探索快速发现问题,并做好数据清洗和预处理。
  • 理解自己正在使用的数据库:明白自己在使用什么样的数据库,不同数据库的特点和适用场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值