Apa itu SQLFluff
SQLFluff adalah Perangkat Lunak Sumber Terbuka (OSS) yang secara otomatis mengidentifikasi dan memperbaiki masalah dalam format SQL Anda. SQLFluff mendukung berbagai dialek SQL (grammar), sehingga menjadi alat yang efektif dan fleksibel untuk lingkungan SQL yang beragam.
Anda dapat mengakses SQLFluff dan pembaruan terbarunya dari repositori resmi Github:
Berbeda dengan bahasa lainnya, SQL tidak memiliki banyak pedoman penulisan yang spesifik. Namun, tren penggunaan SQL oleh profesional non-IT, seperti salesperson dan marketer, untuk menganalisis data semakin meningkat. Seiring dengan banyaknya orang yang menggunakan SQL untuk analisis data, gaya penulisan SQL yang dihasilkan akan bervariasi secara luas. Menggunakan SQLFluff untuk memaksa secara semi menyatukan gaya penulisan query dapat dianggap sebagai upaya yang baik untuk menjaga standar dan meningkatkan efisiensi analisis data.
Instalasi
Untuk menginstal SQLFluff, Anda perlu memiliki Python3 terpasang di sistem Anda.
Anda dapat menginstal SQLFluff menggunakan pip, yang merupakan manajer paket untuk Python. Cukup masukkan perintah berikut:
$ pip3 install sqlfluff
Menggunakan SQLFluff
SQLFluff menyediakan dua fungsi utama: lint
dan fix
.
Lint
lint
dirancang untuk membaca query SQL dan menyoroti masalah yang ditemukan.
Pertimbangkan query SQL berikut:
SELECT
ABC, XYZ
froM
TMP
Untuk menggunakan lint
, masukkan query SQL sebagai berikut:
$ sqlfluff lint example.sql --dialect=bigquery
== [example.sql] FAIL
L: 1 | P: 1 | LT01 | Expected only single space before 'SELECT' keyword.
| Found ' '. [layout.spacing]
L: 1 | P: 1 | LT02 | First line should not be indented.
| [layout.indent]
L: 1 | P: 1 | LT13 | Files must not begin with newlines or whitespace.
| [layout.start_of_file]
L: 1 | P: 8 | LT09 | Select targets should be on a new line unless there is
| only one select target.
| [layout.select_targets]
L: 2 | P: 1 | LT02 | Expected indent of 4 spaces.
| [layout.indent]
L: 3 | P: 3 | CP01 | Keywords must be consistently upper case.
| [capitalisation.keywords]
L: 4 | P: 1 | LT02 | Expected indent of 4 spaces.
| [layout.indent]
All Finished π π!
Untuk menggunakan lint
, masukkan query SQL sebagai berikut:
lint
akan menghasilkan beberapa baris teks, setiap baris mengidentifikasi masalah spesifik dalam query SQL.
Dalam output ini, L
menunjukkan nomor baris, dan P
menunjukkan posisi masalah dalam baris tersebut. Di sebelahnya, Anda akan melihat kode kesalahan seperti LT01
, LT02
, dll., diikuti oleh pesan yang menggambarkan masalah yang diidentifikasi.
Untuk pemahaman yang lebih detail tentang kode kesalahan yang dikembalikan oleh SQLFluff, lihat dokumentasi resmi:
dialek
Anda dapat memilih dari berbagai dialek saat menggunakan SQLFluff. Gunakan perintah berikut untuk menampilkan daftar dialek yang tersedia:
$ sqlfluff dialects
==== sqlfluff - dialects ====
ansi: ansi dialect [inherits from 'nothing']
athena: athena dialect [inherits from 'ansi']
bigquery: bigquery dialect [inherits from 'ansi']
clickhouse: clickhouse dialect [inherits from 'ansi']
databricks: databricks dialect [inherits from 'sparksql']
db2: db2 dialect [inherits from 'ansi']
duckdb: duckdb dialect [inherits from 'postgres']
exasol: exasol dialect [inherits from 'ansi']
greenplum: greenplum dialect [inherits from 'postgres']
hive: hive dialect [inherits from 'ansi']
materialize: materialize dialect [inherits from 'postgres']
mysql: mysql dialect [inherits from 'ansi']
oracle: oracle dialect [inherits from 'ansi']
postgres: postgres dialect [inherits from 'ansi']
redshift: redshift dialect [inherits from 'postgres']
snowflake: snowflake dialect [inherits from 'ansi']
soql: soql dialect [inherits from 'ansi']
sparksql: sparksql dialect [inherits from 'ansi']
sqlite: sqlite dialect [inherits from 'ansi']
teradata: teradata dialect [inherits from 'ansi']
tsql: tsql dialect [inherits from 'ansi']
Menyesuaikan Aturan SQLFluff
SQLFluff memungkinkan penyesuaian detail aturannya. Anda dapat mengonfigurasi semua aturan, aturan individu, dan bahkan cakupan penerapan aturan.
Pengaturan aturan dapat diubah dengan menulis konfigurasi kustom Anda dalam salah satu file berikut:
setup.cfg
tox.ini
pep8.ini
.sqlfluff
pyproject.toml
Misalnya, Anda dapat mengonfigurasi file .sqlfluff
sebagai berikut:
[sqlfluff]
dialect = bigquery
exclude_rules = L036
Dalam kasus ini, semua aturan kecuali aturan L036
akan diterapkan.
fix
Sementara lint
hanya menunjukkan masalah dalam query SQL Anda sesuai dengan aturan yang ditetapkan, fix
melakukan langkah lebih lanjut. Selain mengidentifikasi masalah, fix
juga mencoba memperbaikinya secara otomatis.
Untuk menggunakan fix
, gunakan perintah berikut:
Ketika Anda menjalankan perintah tersebut, SQLFluff akan pertama-tama mencari pelanggaran aturan. Jika ditemukan pelanggaran, SQLFluff akan meminta konfirmasi sebelum mencoba memperbaikinya. Untuk melanjutkan dengan perbaikan, jawab dengan Y
.
$ sqlfluff fix example1.sql --dialect=bigquery
==== finding fixable violations ====
== [example.sql] FAIL
L: 1 | P: 1 | LT01 | Expected only single space before 'SELECT' keyword.
| Found ' '. [layout.spacing]
L: 1 | P: 1 | LT02 | First line should not be indented.
| [layout.indent]
L: 1 | P: 8 | LT09 | Select targets should be on a new line unless there is
| only one select target.
| [layout.select_targets]
L: 2 | P: 1 | LT02 | Expected indent of 4 spaces.
| [layout.indent]
L: 3 | P: 3 | CP01 | Keywords must be consistently upper case.
| [capitalisation.keywords]
L: 4 | P: 1 | LT02 | Expected indent of 4 spaces.
| [layout.indent]
==== fixing violations ====
6 fixable linting violations found
Are you sure you wish to attempt to fix these? [Y/n]
When you execute the command, SQLFluff will first find any violations of the rules. If it finds any, it will ask for confirmation before attempting to fix them. To proceed with the fixes, respond with Y
.
Attempting fixes...
Persisting Changes...
== [example.sql] FIXED
Done. Please check your files to confirm.
All Finished π π!
Setelah Anda mengonfirmasi perbaikan, SQLFluff akan secara otomatis membuat perubahan yang diperlukan pada query SQL Anda.
SELECT
ABC,
XYZ
FROM
TMP
Seperti lint
, Anda juga dapat menyesuaikan aturan untuk fix
sesuai dengan kebutuhan Anda.
Referensi