前言
最近一直在思考如何帮助他人来学习 SQL,这里作为一名数据库 SQL 优化器的研发同学,我尝试从我个人的经验来分享一些提升对 SQL 的掌握使用的方法。
首先先来说说我个人觉得精通 SQL 有哪几个过程:
首先,你需要先能够学会使用 SQL ,来满足业务方同学的日常取数需求,先让业务方能够用起来你的数据。随着自己写的 SQL 查询增多,开始对于某一类数据库或者大数据引擎(比如 Presto)的 SQL 语法掌握的越来越娴熟,包括 SQL 语法、函数、子查询使用、各种优化参数、以及它的 SQL 语法标准等等。自己能够尝试开始解决使用 SQL 遇到的一些性能问题,比如 SQL 查询遇到数据倾斜、使用 Semi Join 等等。自己开始能够结合业务领域模型,如果每次查询的数据量和计算非常巨大时,能够对于 SQL 使用的数据进行数仓分层,包括:ODS、DWS、DWD、ADS 层。开始对于 SQL 的执行流程有一定了解,包括 SQL 的 AST 语法解析、SQL 验证、SQL 优化器的优化、SQL 转换的物理计划如何执行、事务、存储过程、以及最终数据如何返回。开始深入了解一个数据库或者大数据引擎的底层原理,包括:SQL 语法的标准、SQL Analylize 的运作原理、SQL 元数据的存储和读取方式、SQL 优化器的优化规则有哪些、计算引擎模型如何设计和执行的、数据如何存储的、事务的原理等等。如果你的日常工作主要是使用 SQL 来查询数据,那么我觉得你掌握上面 1 、2 、3 点应该就够了,但是如果你未来计划从事数据库或者大数据引擎的内核研发工作,那么我觉得上面 6点,你可能都需要掌握,毕竟这是你未来要吃饭的东西。
接下来我分享一些如何提升上面六点的一些经验。
1. 学会使用 ChatGPT 来帮你得到答案
你需要学会问 chatgpt,你有任何不懂的问题,都可以尝试先问下 ChatGPT,看下它能不能给你解决问题的答案。
比如你可以让 chatgpt 扮演你具体使用的数据库或者大数据引擎,然后可以问它你各种想知道的 SQL 语法,或者让它帮你写 SQL 也是可以的。比如下面我让 chatgpt扮演一个 postgresql 数据库:
同时你也可以向它询问 SQL 性能问题的相关解决方法,比如解决数据倾斜导致 SQL 查询过久的问题:
总之一句话,有什么数据库或者 SQL 相关的问题,你都可以先尝试咨询 chatgpt。
2. 学会阅读一些好的数据库书籍
A DREAM COMES TRUE
1. 《Head First SQL》
2. 《SQL查询的艺术》
3. 《SQL入门经典》
4. 《数据库系统概念(原书第7版)》
3. 学会从好的开源 Apache 项目学习
这里我推荐你可以学习 Apache Calcite 这个开源项目,Apache Calcite 是一个对于 SQL 解析和管理的框架,主要包括了 SQL 语法解析、SQL 的校验、SQL 的优化(RBO 和 CBO的优化)、SQL 的方言转换等等,它内部现在也有仅百种优化规则,同时它的所有模块都是支持可自定义功能扩展的。
Apache Calcite 整体是 Java 开发的,所以相对于其他语言,比如 C++、C,它能够更好的阅读和理解源代码。我建议你可以将它的代码 clone 下来,然后尝试结合官方文档,以及网上的一些博客,来学习 Apache Calcite。
现在也有很多开源项目使用 Apache Calcite,比如 Apache Flink、Apache Hive、Apache Drill、Apache Kylin 等等,所以需要对于 SQL 的框架有更好的了解,你可以尝试先了解 Apache Calcite 这块开源的 SQL 管理框架原理,在了解其他大数据引擎或者数据库时,其实底层的原理都非常类似。
4. 总结最后,如果你对于数据库、大数据、AI、理财相关的知识感兴趣的话,欢迎你关注我,如果有任何想要咨询的问题,也欢迎你私信我,我都会一一回答。