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、配置


增加如下配置
// ============ 下面是新增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

浙公网安备 33010602011771号