sqlfluff 做sql格式化

安装

1、python安装sqlfluff

pip install sqlfluff 

# 国内慢可以加镜像

pip install sqlfluff -i https://pypi.tuna.tsinghua.edu.cn/simple

2、vscode软件安装

插件搜索并安装

sqlfluff.vscode-sqlfluff

3、配置

image

image

增加如下配置

// ============ 下面是新增sqlfluff配置 ============
    "[sql]": {
        "editor.defaultFormatter": "sqlfluff.vscode-sqlfluff"
    },
    "[hql]": {
        "editor.defaultFormatter": "sqlfluff.vscode-sqlfluff"
    },
    "sqlfluff.dialect": "doris",
    "sqlfluff.fixOnSave": true,
    "editor.formatOnSave": true,
    "sqlfluff.executablePath": "/Users/robots/Library/Python/3.9/bin/sqlfluff"

4、定制化sql格式化

vim ~/.sqlfluff

[sqlfluff]
# 使用 Apache Doris 方言;Doris 方言继承 MySQL,更适合 Doris SQL 语法
dialect = doris
# 不使用 Jinja 等模板渲染,按原始 SQL 文本解析
templater = raw
# 单行最大长度,超过后 SQLFluff 会尝试自动换行
max_line_length = 100
# 不排除 L016 / layout.long_lines,否则长行不会被自动拆分
# L029: 关键字作为标识符相关规则,Doris/数仓字段名场景下容易误报
# L045: 查询复杂度/可达性相关规则,复杂 SQL 中容易误报
# ST07: USING 子句风格规则,保留 Doris/MySQL 常见 JOIN 写法
exclude_rules = L022, L029, L045, ST07

[sqlfluff:indentation]
# 使用 4 个空格作为缩进宽度
tab_space_size = 4
# 使用空格缩进,不使用 tab
indent_unit = space

# 含行内注释的超长行不参与 LT05 自动折行,避免 SQLFluff 在 -- 注释处无法安全重排
[sqlfluff:rules:layout.long_lines]
ignore_comment_lines = True

[sqlfluff:layout:type:comma]
# 逗号放在行尾:
line_position = leading
# 逗号后没空格
spacing_after = touch

#when自动换行
[sqlfluff:layout:type:case_when]
line_position = leading
[sqlfluff:layout:type:when_clause]
line_position = leading

[sqlfluff:layout:type:with_compound_statement]
# 让 WITH 语句独占一行,避免出现 ") AS WITH t1 ("
line_position = alone:strict
# 让 WITH 关键字本身也强制独占一行
keyword_line_position = alone:strict
[sqlfluff:layout:type:binary_operator]
# 二元操作符放在下一行行首,例如 AND / OR / + / -
line_position = leading

# and和or需要换行
[sqlfluff:layout:type:and_keyword]
line_position = leading
[sqlfluff:layout:type:or_keyword]
line_position = leading


[sqlfluff:layout:type:comparison_operator]
# 比较操作符放在下一行行首,例如 = / <> / < / >
line_position = leading

 

posted @ 2026-07-24 14:03  Robots2  阅读(7)  评论(0)    收藏  举报