# SQL fluff

SQLFluff is a dialect-flexible and configurable SQL linter it works with Jinja templating and dbt™️. SQLFluff will auto-fix most linting errors, allowing you to focus your time on what matters.

Paradime provides an integration out of the box for you to run SQLFluff in your dbt™️ project.

{% embed url="<https://docs.sqlfluff.com/en/stable/index.html>" %}

## Configuration

### Create the `.sqlfluff` configuration file

To get started simply you will need to create a file called `.sqlfluff` in your dbt™️ root directory (this is in the same directory where your `dbt_project.yml` lives.

### Set your configuration file by adding supported rules

Now you will need to add your own configuration to decide which rules to enforce when running SQLFluff in the Paradime terminal.

You can copy and paste the below template to get started with some simple rules. Make sure to update **`line 4`** with the appropriate sql dialect based on your data warehouse provider.

{% code title=".sqlfluff" lineNumbers="true" %}

```yaml
[sqlfluff]
# Supported dialects https://docs.sqlfluff.com/en/stable/dialects.html
# Or run 'sqlfluff dialects in the paradime terminal'
dialect = snowflake #<--- update the dialect based on your connected data warehouse
templater = dbt

[sqlfluff:templater:dbt]
project_dir = ./

# Comma separated list of rules to exclude, or None
# See https://docs.sqlfluff.com/en/stable/configuration.html#enabling-and-disabling-rules
# AM04 (ambiguous.column_count) and ST06 (structure.column_order) are
# two of the more controversial rules included to illustrate usage.
exclude_rules = ambiguous.column_count, structure.column_order

# The standard max_line_length is 80 in line with the convention of
# other tools and several style guides. Many projects however prefer
# something a little longer.
# Set to zero or negative to disable checks.
max_line_length = 120

# If using the dbt templater, we recommend setting the project dir.


[sqlfluff:indentation]
# While implicit indents are not enabled by default. Many of the
# SQLFluff maintainers do use them in their projects.
allow_implicit_indents = true

# The default configuration for aliasing rules is "consistent"
# which will auto-detect the setting from the rest of the file. This
# is less desirable in a new project and you may find this (slightly
# more strict) setting more useful.
[sqlfluff:rules:aliasing.table]
aliasing = explicit
[sqlfluff:rules:aliasing.column]
aliasing = explicit
[sqlfluff:rules:aliasing.length]
min_alias_length = 3

# The default configuration for capitalization rules is "consistent"
# which will auto-detect the setting from the rest of the file. This
# is less desirable in a new project and you may find this (slightly
# more strict) setting more useful.
# Typically we find users rely on syntax highlighting rather than
# capitalization to distinguish between keywords and identifiers.
# Clearly, if your organization has already settled on uppercase
# formatting for any of these syntax elements then set them to "upper".
# See https://stackoverflow.com/questions/608196/why-should-i-capitalize-my-sql-keywords-is-there-a-good-reason
[sqlfluff:rules:capitalisation.keywords]
capitalisation_policy = lower
[sqlfluff:rules:capitalisation.identifiers]
capitalisation_policy = lower
[sqlfluff:rules:capitalisation.functions]
extended_capitalisation_policy = lower
[sqlfluff:rules:capitalisation.literals]
capitalisation_policy = lower
[sqlfluff:rules:capitalisation.types]
extended_capitalisation_policy = lower
```

{% endcode %}

{% hint style="info" %}
You can check all the rules to help you manage code readability at the link below.
{% endhint %}

{% embed url="<https://docs.sqlfluff.com/en/stable/rules.html>" %}

## Running SQLFluff

SQLFluff provides a CLI to execute commands and lint your sql files in your dbt™️ project.

{% embed url="<https://docs.sqlfluff.com/en/stable/cli.html>" %}

With Paradime you can execute SQLFluff with one click using the `Prettify` button in the terminal toolbar.

Simply open the file you want to lint and click on the `Prettify` button.

{% @arcade/embed flowId="KSOKBR4tiYJSgU9KsUZg" url="<https://app.arcade.software/share/KSOKBR4tiYJSgU9KsUZg>" %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.paradime.io/app-help/~/changes/rDjfrwa4QH3nWWrOItTq/documentation/integrations/code-ide/sql-fluff.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
