SELECT a FROM foo zoo SELECT voo.a FROM foo AS voo Aliasing Code Alias Name description Groups sqlfluff fix compatible all core その他 AL01 L011 aliasing.table テーブルのエイリアスの前にASを付与するかど うか 〇 ー aliasing 〇 Name description default values aliasing 明示的なエイリアスが必要かどうか explicit explicit:エイリアス(AS)を明示的に付与する implicit:エイリアスを明示的に付与せず暗黙的にする
SELECT a alias_col FROM foo SELECT a AS alias_col FROM foo Aliasing Code Alias Name description Groups sqlfluff fix compatible all core その他 AL02 L012 aliasing.column カラムのエイリアスの前にASを付与するかどう か 〇 〇 aliasing 〇 Name description default values aliasing 明示的なエイリアスが必要かどうか explicit explicit:エイリアス(AS)を明示的に付与する implicit:エイリアスを明示的に付与せず暗黙的にする
SELECT sum(a), sum(b) FROM foo SELECT sum(a) AS a_sum, sum(b) AS b_sum FROM foo Aliasing Code Alias Name description Groups sqlfluff fix compatible all core その他 AL03 L013 aliasing.expression カラム式にASと一緒にエイリアスを付与する 〇 〇 aliasing ー Name description default values allow_scalar select句のカラムが単一の場合にエイリアスを 付けないことを許可するかどうか。 True True:select句のカラムが単一の場合はルールが無視される False:どんな時もエイリアスをつけるようにする
SELECT t.a, t.b FROM foo AS t, bar AS t SELECT f.a, b.b FROM foo AS f, bar AS b Aliasing Code Alias Name description Groups sqlfluff fix compatible all core その他 AL04 L020 aliasing.unique.table テーブルエイリアスがユニークであるかどうか 〇 〇 aliasing, aliasing.unique ー Name description default values ー
SELECT a FROM foo AS zoo SELECT a FROM foo Aliasing Code Alias Name description Groups sqlfluff fix compatible all core その他 AL05 L025 aliasing.unused テーブルエイリアスが利用されていない場合は エイリアスを削除する 〇 〇 aliasing 〇 Name description default values ー
SELECT SUM(o.amount) as order_amount FROM orders as o SELECT SUM(orders.amount) as order_amount FROM orders Aliasing Code Alias Name description Groups sqlfluff fix compatible all core その他 AL06 L066 aliasing.length From句とJOIN句の中で設定するテーブル のエイリアスの長さを強制する 〇 〇 aliasing ー Name description default values max_alias_length 許容されるエイリアスの最大長 NONE (0~1000) min_alias_length 許容されるエイリアスの最小長 NONE (0~1000)
2023/09/08 11 SELECT COUNT(o.customer_id) as order_amount, c.name FROM orders as o JOIN customers as c on o.id = c.user_id SELECT COUNT(orders.customer_id) as order_amount, customers.name FROM orders JOIN customers on orders.id = customers.user_id Aliasing Code Alias Name description Groups sqlfluff fix compatible all core その他 AL07 L031 aliasing.forbid テーブルのエイリアスを許容するかどうか 〇 ー aliasing ー Name description default values force_enable このルールがデフォルトで無効になっている dialectでも、このルールを実行する。(基本 的に全てのdialectで有効) False False:デフォルトが無効になっているdialectではルールを実行しない Ture:デフォルトが無効になっているdialectでもルールを実行する 議論の余地があるルールである。 特にBigQueryユーザは無効化のままを推奨
SELECT a as foo, b as foo FROM tbl SELECT a as foo, b as bar FROM tbl Aliasing Code Alias Name description Groups sqlfluff fix compatible all core その他 AL08 ー aliasing.unique.column カラムエイリアスがユニークであるかどうか 〇 〇 aliasing, aliasing.unique ー Name description default values ー ※v2.3.0から導入
BYに含まれないといけないから) 2023/09/08 14 SELECT DISTINCT a FROM foo GROUP BY a SELECT a FROM foo GROUP BY a Ambiguous Code Alias Name description Groups sqlfluff fix compatible all core その他 AM01 L021 ambiguous.distinct GROUP BY句がある場合はDISTINCTを 削除する 〇 〇 ambiguous ー Name description default values ー
2023/09/08 15 SELECT a, b FROM table_1 UNION SELECT a, b FROM table_2 SELECT a, b FROM table_1 UNION DISTINCT SELECT a, b FROM table_2 Ambiguous Code Alias Name description Groups sqlfluff fix compatible all core その他 AM02 L033 ambiguous.union UNION DISTINCTを明示的に記載する かどうか 〇 〇 ambiguous 〇 Name description default values ー
16 SELECT a, b FROM foo ORDER BY a, b DESC SELECT a, b FROM foo ORDER BY a ASC, b DESC Ambiguous Code Alias Name description Groups sqlfluff fix compatible all core その他 AM03 L037 ambiguous.order_by ORDER BY句の中でASCを明示的に書く かどうか 〇 ー ambiguous 〇 Name description default values ー
2023/09/08 17 WITH cte AS ( SELECT * FROM foo ) SELECT * FROM cte UNION SELECT a, b FROM t WITH cte AS ( SELECT a, b FROM foo ) SELECT * FROM cte UNION SELECT a, b FROM t Ambiguous Code Alias Name description Groups sqlfluff fix compatible all core その他 AM04 L044 ambiguous.column_count * を許容するかどうか 〇 ー ambiguous ー Name description default values ー
の中でのカラム参照形式は統一すべし dbt style guide的にはカラムの参照は 1, 2, 3, 4 とかが推奨されています。(WINDOW節はこのルールでは無視される) 2023/09/08 19 SELECT foo, bar, sum(baz) AS sum_value FROM fake_table GROUP BY foo, 2; SELECT foo, bar, sum(baz) AS sum_value FROM fake_table GROUP BY 1, 2; Ambiguous Code Alias Name description Groups sqlfluff fix compatible all core その他 AM06 L054 ambiguous.column_referenc es GROUP BYもしくはORDER BY の中で統 一するかどうか 〇 〇 ambiguous ー Name description default values group_by_and_ order_by_style 明示的にカラム名を書くか、暗黙的に数字に するか、とりあえず統一してあればどちらでもい いかを指定 consistent consistent:統一されていればどちらでもいい implicit:1,2,3,4のように明示的に書かないほうで統一 explicit:カラム名を明示的に書くほうで統一
WITH cte AS ( SELECT a, b FROM foo ) SELECT * FROM cte UNION SELECT c, d, e FROM t WITH cte AS ( SELECT a, b FROM foo ) SELECT a, b FROM cte UNION SELECT c, d FROM t Ambiguous Code Alias Name description Groups sqlfluff fix compatible all core その他 AM07 L068 ambiguous.set_columns カラム数を合わせるかどうか 〇 ー ambiguous ー Name description default values ー
select a, B from foo select a, b from foo Capitalisation Code Alias Name description Groups sqlfluff fix compatible all core その他 CP02 L014 capitalisation.identifiers 大文字か小文字か統一するかどうか 〇 〇 capitalization 〇 Name description default values extended_capitalisation_policy 大文字小文字の統一に関するポリシー consistent consistent:統一してあること upper:大文字で統一していること lower:小文字で統一していること pascal:パスカルケースで統一していること(キャメルケースは…?使わないか…) capitalise:頭文字が大文字で統一していること ignore_words カンマ区切りで対象外のワードを指定する None ー ignore_words_regex 正規表現で対象外のワードを指定する None 詳しくは公式のリファレンスを確認 unquoted_identifiers_policy 違反チェックの対象とする“”で囲まれていない 識別子に関するポリシー all ※[sqlfluff:rules] で定義されている all:すべて aliases:エイリアスのみ column_aliasses:カラムエイリアスのみ
25 select a, null, TRUE, false from foo select a, null, true, false from foo Capitalisation Code Alias Name description Groups sqlfluff fix compatible all core その他 CP04 L040 capitalisation.literals 大文字か小文字か統一するかどうか 〇 〇 capitalization 〇 Name description default values CP01と同じ
select a::INT as a_int, b::text as b_text from foo select a::INT as a_int, b::TEXT as b_text from foo Capitalisation Code Alias Name description Groups sqlfluff fix compatible all core その他 CP05 L063 capitalisation.types 大文字か小文字か統一するかどうか 〇 ー capitalization 〇 Name description default values CP03と同じ
not equal to として使うべし 一般的に != のほうがよく使われませんか?(Excelは…) 2023/09/08 28 SELECT * FROM X WHERE 1 <> 2 SELECT * FROM X WHERE 1 != 2 Convention Code Alias Name description Groups sqlfluff fix compatible all core その他 CV01 L060 convention.not_equal <>の代わりに!=を使うかどうか 〇 ー convention 〇 Name description default values ー
SELECT ifnull(foo, 0) AS bar_if_null, nvl(foo, 0) AS bar_nvl FROM baz SELECT COALESCE(foo, 0) AS bar_if_null, COALESCE(foo, 0) AS bar_nvl FROM baz Convention Code Alias Name description Groups sqlfluff fix compatible all core その他 CV02 L061 convention.coalesce IFNULLやNVLの代わりにCOALESCEを 使うかどうか 〇 ー convention 〇 Name description default values ー
, はエラーになるデータベースがあるので、やめたほうがいいです。(ちょっとめんどくさい構文ルールだと思っている) 2023/09/08 30 SELECT a, b, FROM foo SELECT a, b FROM foo Convention Code Alias Name description Groups sqlfluff fix compatible all core その他 CV03 L038 convention.select_trailing_c omma 末尾のカンマを許容するかどうか 〇 〇 convention 〇 Name description default values select_clause_trailing_comma 末尾のカンマを禁止にするか必須にするか forbid forbid:禁止する require:必須にする
NOT を使うべし NULLに対する比較演算子は特殊なので IS, IS NOT を使わないのはコーディングエラーの場合が多いと思います。(意図して使うこともあるかも) 2023/09/08 32 SELECT a FROM foo WHERE a = NULL SELECT a FROM foo WHERE a IS NULL Convention Code Alias Name description Groups sqlfluff fix compatible all core その他 CV05 L049 convention.is_null = もしくは != の代わりに IS もしくは IS NOT を使うかどうか 〇 〇 convention 〇 Name description default values ー
2023/09/08 34 (SELECT foo FROM bar) SELECT foo FROM bar Convention Code Alias Name description Groups sqlfluff fix compatible all core その他 CV07 L053 convention.statement_brack ets トップレベルの文を () でくくらないようにするか どうか 〇 ー convention 〇 Name description default values ー
2023/09/08 35 SELECT foo.col1, bar.col2 FROM foo RIGHT JOIN bar ON foo.bar_id = bar.id SELECT foo.col1, bar.col2 FROM bar LEFT JOIN foo ON foo.bar_id = bar.id Convention Code Alias Name description Groups sqlfluff fix compatible all core その他 CV08 L055 convention.left_join LEFT JOINに統一するかどうか 〇 ー convention ー Name description default values ー
2023/09/08 38 SELECT CONVERT(int, 1) AS bar, 100::int::text, CAST(10 AS text) AS coo FROM foo SELECT CAST(1 AS int) AS bar, CAST(CAST(100 AS int) AS text), CAST(10 AS text) AS coo FROM foo Convention Code Alias Name description Groups sqlfluff fix compatible all core その他 CV11 L067 convention.casting_style キャストの書き方をそろえるかどうか 〇 ー convention 〇 Name description default values preferred_type_casting_style キャストのスタイルの指定 consistent consistent:最初に登場した書き方にそろえる shorthand::: を利用した書き方にそろえる convert:CONBERT関数を利用した書き方にそろえる cast:CAST関数を利用した書き方にそろえる
SELECT {{ a }} FROM {{ref('foo')}} SELECT {{ a }} FROM {{ ref('foo') }} Jinja Code Alias Name description Groups sqlfluff fix compatible all core その他 JJ01 L046 jinja.padding 両側に半角スペースをつけるかどうか 〇 〇 jinja 〇 Name description default values ー
SELECT a, b(c) AS d•• FROM foo•••• INNER JOIN bar USING(a) SELECT a, b(c) AS d FROM foo INNER JOIN bar USING (a) Layout Code Alias Name description Groups sqlfluff fix compatible all core その他 LT01 L001 ※ layout.spacing スペースの入れ方をルールにしたがったものに するかどうか 〇 〇 layout 〇 Name description default values ※L005, L006, L008, L023, L024, L039, L048, L071 [sqlfluff:layout] の設定値はまとめて本セクションの末尾で詳細を記載する (•は半角スペースを示す)
SELECT a, b FROM foo SELECT a, b FROM foo Layout Code Alias Name description Groups sqlfluff fix compatible all core その他 LT02 L002 ※ layout.indent インデントの入れ方をルールにしたがったもの にするかどうか 〇 〇 layout 〇 Name description default values ※L003, L004 (•は半角スペースを示す) [sqlfluff:layout] の設定値はまとめて本セクションの末尾で詳細を記載する
SELECT a + b FROM foo SELECT a + b FROM foo Layout Code Alias Name description Groups sqlfluff fix compatible all core その他 LT03 L007 layout.operators 演算子の改行前後の位置のルールにした がったものにするかどうか 〇 ー layout 〇 Name description default values [sqlfluff:layout] の設定値はまとめて本セクションの末尾で詳細を記載する
! 2023/09/08 45 SELECT a , b, c FROM foo SELECT a, b, c FROM foo Layout Code Alias Name description Groups sqlfluff fix compatible all core その他 LT04 L019 layout.commas カンマの位置をルールにしたがったものにする かどうか 〇 ー layout 〇 Name description default values [sqlfluff:layout] の設定値はまとめて本セクションの末尾で詳細を記載する
2023/09/08 47 SELECT sum (a) FROM foo SELECT sum(a) FROM foo Layout Code Alias Name description Groups sqlfluff fix compatible all core その他 LT06 L017 layout.functions 関数名と()の間にスペースを含めるかどうか 〇 〇 layout 〇 Name description default values [sqlfluff:layout] の設定値はまとめて本セクションの末尾で詳細を記載する
WITH zoo AS ( SELECT a FROM foo) SELECT * FROM zoo WITH zoo AS ( SELECT a FROM foo ) SELECT * FROM zoo Layout Code Alias Name description Groups sqlfluff fix compatible all core その他 LT07 L018 layout.cte_bracket CTEを閉じる際に改行をするかどうか 〇 〇 layout 〇 Name description default values [sqlfluff:layout] の設定値はまとめて本セクションの末尾で詳細を記載する
WITH plop AS ( SELECT * FROM foo ) SELECT a FROM plop WITH plop AS ( SELECT * FROM foo ) SELECT a FROM plop Layout Code Alias Name description Groups sqlfluff fix compatible all core その他 LT08 L022 layout.cte_newline CTEを閉じた後に改行をするかどうか 〇 〇 layout 〇 Name description default values [sqlfluff:layout] の設定値はまとめて本セクションの末尾で詳細を記載する
をSELECTの行に入れればOKです! 2023/09/08 50 WITH sample_tbl AS ( SELECT a, b FROM foo ) SELECT a FROM sample_tbl WITH sample_tbl AS ( SELECT a, b FROM foo ) SELECT a FROM sample_tbl Layout Code Alias Name description Groups sqlfluff fix compatible all core その他 LT09 L036 layout.select_targets SELECTの対象が1つしかない場合を除いて 改行を強制するかどうか 〇 ー layout 〇 Name description default values wildcard_policy ワイルドカード * の扱いの設定 single single:単一の対象として扱う(改行をしなくていい) multiple:複数の対象として扱う(改行を必要とする)
select distinct a, b from x select distinct a, b from x Layout Code Alias Name description Groups sqlfluff fix compatible all core その他 LT10 L041 layout.select_modifiers 修飾子をSELECTと同じ行に書くかどうか 〇 〇 layout 〇 Name description default values [sqlfluff:layout] の設定値はまとめて本セクションの末尾で詳細を記載する
これは異論ないでしょう! 2023/09/08 52 SELECT 'a' AS col UNION ALL SELECT 'b' AS col SELECT 'a' AS col UNION ALL SELECT 'b' AS col Layout Code Alias Name description Groups sqlfluff fix compatible all core その他 LT11 L065 layout.set_operators Set Operatorの前後で改行を強制するか どうか 〇 〇 layout 〇 Name description default values [sqlfluff:layout] の設定値はまとめて本セクションの末尾で詳細を記載する
SELECT a FROM foo$ SELECT a FROM foo $ Layout Code Alias Name description Groups sqlfluff fix compatible all core その他 LT12 L009 ※ layout.end_of_file ファイルの末尾を改行のみの1行にすべし 〇 〇 layout 〇 Name description default values ※layout.end-of-file [sqlfluff:layout] の設定値はまとめて本セクションの末尾で詳細を記載する ($はファイルの末尾を示す)
^ -- noqa: disable=LT09 SELECT a FROM foo -- noqa: disable=LT09 SELECT a FROM foo Layout Code Alias Name description Groups sqlfluff fix compatible all core その他 LT13 L050 layout.start_of_file ファイルの改行もしくは空白で始まらないよう にするかどうか 〇 ー layout 〇 Name description default values [sqlfluff:layout] の設定値はまとめて本セクションの末尾で詳細を記載する (^はファイルの先頭を示す)
SELECT vee.a FROM foo SELECT a FROM foo References Code Alias Name description Groups sqlfluff fix compatible all core その他 RF01 L025 references.from FROM句に登場しないオブジェクトを参照し ないようにするかどうか 〇 〇 references ー Name description default values force_enable デフォルトでこのルールが無効になっている dialectにおいて、ルールを適用させるかどうか False (booleanなので割愛)
SELECT a, b FROM foo LEFT JOIN vee ON foo.a = vee.a SELECT foo.a, vee.b FROM foo LEFT JOIN vee ON foo.a = vee.a References Code Alias Name description Groups sqlfluff fix compatible all core その他 RF02 L027 references.consistent 参照を必要とするかどうか 〇 ー references ー Name description default values ー
SELECT a, foo.b FROM foo SELECT a, b FROM foo References Code Alias Name description Groups sqlfluff fix compatible all core その他 RF03 L028 references.consistent 1つのテーブルの場合にReferenceをするか どうか 〇 ー references 〇 Name description default values force_enable デフォルトでこのルールが無効になっている dialectにおいて、ルールを適用させるかどうか False (booleanなので割愛) single_table_refer ences 一つのテーブルのSELECT文でReferenceを 統一する方針 consistent consistent:最初に登場するものを優先する qualified:参照する方で統一する unqualified:参照しない方で統一する
2023/09/08 72 select case when name like '%cat%' then 'meow' when name like '%dog%' then 'woof' else null end from x select case when name like '%cat%' then 'meow' when name like '%dog%' then 'woof' end from x Structure Code Alias Name description Groups sqlfluff fix compatible all core その他 ST01 L035 structure.else_null else null を省略するかどうか 〇 ー structure 〇 Name description default values ー
SELECT CASE WHEN fab > 0 THEN true ELSE false END AS is_fab FROM fancy_table SELECT COALESCE (fab > 0, FALSE) AS is_fab FROM fancy_table Structure Code Alias Name description Groups sqlfluff fix compatible all core その他 ST02 L043 structure.simple_case 簡単なCASE文を関数で代用するか 〇 ー structure 〇 Name description default values ー
WITH cte1 AS ( SELECT a FROM t ), cte2 AS ( SELECT b FROM u ) SELECT * FROM cte1 WITH cte1 AS ( SELECT a FROM t ) SELECT * FROM cte1 Structure Code Alias Name description Groups sqlfluff fix compatible all core その他 ST03 L045 structure.unused_cte 使っていないCTEをそのままにするかどうか 〇 〇 structure ー Name description default values ー
SELECT CASE WHEN species = 'Cat' THEN 'Meow' ELSE CASE WHEN species = 'Dog' THEN 'Woof' END END AS sound FROM mytable SELECT CASE WHEN species = 'Cat' THEN 'Meow' WHEN species = 'Dog' THEN 'Woof' END AS sound FROM mytable Structure Code Alias Name description Groups sqlfluff fix compatible all core その他 ST04 L058 structure.nested_case ELSE内でネストされたCASEをフラット化す るかどうか 〇 ー structure 〇 Name description default values ー
select a.x, a.y, b.z from a inner join ( select x, z from b ) using (x) with prep_1 as ( select x, z from b ) select a.x, a.y, b.z from a inner join prep_1 using (x) Structure Code Alias Name description Groups sqlfluff fix compatible all core その他 ST05 L042 structure.subquery サブクエリの代わりにCTEにするかどうか 〇 ー structure 〇 Name description default values forbid_subquery_in どの句の中のサブクエリをLintの対象にするか join join:JOIN句の中で許されない(Lintの対象) from:FROM句の中で許されない(Lintの対象) both:JOINとFROMの中で許されない(Lintの対象)
計算・集計 の順に書くべし * を使うのは良くないよとAM04でも言っていましたが、使うとして位置は頭がいいらしいです。そして複雑な計算は末尾がいいらしいです。 2023/09/08 77 select a, *, row_number() over (partition by id order by date) as y, b from x select *, a, b, row_number() over (partition by id order by date) as y from x Structure Code Alias Name description Groups sqlfluff fix compatible all core その他 ST06 L034 structure.column_order カラムの順番にルールを持たせるかどうか 〇 ー structure 〇 Name description default values ー
DISTINCTの () は意味がなく、誤解を生むだけの百害あって一利なしなので、つけないでください(関数ではないし、特定のカラムに限定できないし…) 2023/09/08 79 SELECT DISTINCT(a), b FROM foo SELECT DISTINCT a, b FROM foo -- もしくは以下 SELECT DISTINCT a, b FROM foo Structure Code Alias Name description Groups sqlfluff fix compatible all core その他 ST08 L015 structure.distinct DISTINCT の () を使わないようにするかど うか 〇 〇 structure 〇 Name description default values ー
select foo.a, foo.b, bar.c from foo left join bar -- This subcondition does not list -- the table referenced earlier first: on bar.a = foo.a -- Neither does this subcondition: and bar.b = foo.b select foo.a, foo.b, bar.c from foo left join bar on foo.a = bar.a and foo.b = bar.b Structure Code Alias Name description Groups sqlfluff fix compatible all core その他 ST09 ー structure.join_condition_ord er 〇 ー structure 〇 Name description default values preferred_first_ta ble_in_join_clause テーブルの参照の順番をどっちが先になるように するか earlier earlier:左が先になるようにする later:右が先になるようにする