基于Bazel + SQLFluff实现SQL lint

e783eba99dae11fa88f8b5bea47c5f86.jpeg

背景

SQL进行版本化控制后,我们希望为SQL加入lint步骤。这样做的好处是我们可以在真正执行SQL前发现问题。

本文中,我们通过Bazel执行SQLFluff[1]以实现SQL的lint。

SQLFluff是一款使用Python语言使用的,支持SQL多方言的SQL lint工具。

它的特点是:

  1. 1. 支持多方言。如:Snowflake、PostgreSQL、ClickHouse。所有支持的方言列表:https://docs.sqlfluff.com/en/stable/dialects.html;

  2. 2. 可以输出正确的SQL,减少了我们手工修正SQL的工作;

  3. 3. 同时支持命令行方式使用和API调用方式。

集成到CI/CD流水线中

在我看来,在CICD流水线中实现SQL lint有两种方式:

  • • 方式一:在流水线中增加一个SQL lint步骤;

  • • 方式二:将SQL lint的逻辑写在测试代码,执行测试步骤,就自动执行了SQL lint。

方式二是我最爱,我会在本文最后讲原因。

工程结构

.
├── BUILD.bazel
├── WORKSPACE
├── repository-hibernate-impl
│   ├── BUILD.bazel
│   └── src
│       ├── main
│       │   └── sql
│       │       └── V1__runbook_table.sql
│       └── test
│           └── python
│               ├── BUILD.bazel
│               ├── requirements_lock.txt
│               └── sql_test.py

步骤1: 在WORKSPACE中增加Python外

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值