Đây là cách SQLFluff đã cứu rỗi đời tôi trong việc review SQL
Với những dự án hàng triệu dòng SQL, việc maintain source code SQL như đi vào vùng hoang dã, hoàn toàn dựa vào sức người, bởi vì không có một linter nào có thể sử dụng được. Và đó là lý do SQLFluff ra đời.
Về mặt định nghĩa, ngôn ngữ lập trình là hệ thống giao tiếp giữa người và máy tính. Không chỉ máy tính là thứ sẽ đọc, con người cũng cần đọc nữa. Bạn có bao giờ bực mình khi đọc một đoạn code xấu xí như thế này chưa?
Một đoạn code gớm ghiếc trên Python
Việc viết code gọn gàng, dễ hiểu rất cần thiết, giúp người đọc tập trung vào phần logic và tăng năng suất làm việc của cả team. Do đó các công cụ Linter ra đời nhằm đảm bảo code đúng coding convention của team. Ở thời điểm hiện tại, việc sử dụng linter là yêu cầu bắt buộc của tất cả các dự án. Các ngôn ngữ phổ biến như Python, Java đều có các linter rất nổi tiếng cho riêng mình, còn SQL thì sao?
Trong dự án trước đây mình tham gia, team có đặt ra quy tắc coding convention cho SQL cũng như đảm bảo chất lượng code dựa vào người review và ý thức của bạn coder, không hề có một tool nào được sử dụng để linter cho SQL cả.
Vấn đề của SQL và sự ra đời của SQLFluff
SQL được xem ngôn ngữ thời tiền sử, có lẽ bất kỳ lập trình viên nào cũng đã từng viết SQL. Tuy nhiên, nếu nói SQL chỉ là một ngôn ngữ thì thật sự không chính xác. Hiện nay, số lượng cơ sở dữ liệu nhiều và vẫn tăng hằng năm. Mỗi cơ sở dữ liệu đều định nghĩa SQL riêng cho mình, phần lớn đều theo chuẩn ANSI, nên chúng có nhiều điểm tương đồng. Tuy nhiên, vẫn có những điểm khác nhau cả về cú pháp cũng như một số quy ước chung.
Sự đa dạng của SQL
SQLFluff là một tool SQL linter giúp bạn kiểm tra coding style theo những rule đã được định nghĩa từ trước bằng command line. Với một số tool sử dụng template như Apache Airflow, dbt… thì SQLFluff cũng hỗ trợ lint.
Việc cài đặt và sử dụng cũng hết sức đơn giản thông qua thư viện của Python. Chúng ta có thể check từng file hoặc cả folder cùng một lúc thông qua command line. Sau khi kiểm tra hoàn tất, kết quả check và lỗi cũng được hiển thị chi tiết.
Cài đặt dễ dàng SQLFluff thông qua thư viện của Python
Lint folder bằng SQLFluff
Bạn sẽ làm gì khi một ngày đẹp trời chạy linter và được trả về thông báo là có 1000 chỗ cần sửa trong source code của mình? Có khi nào bạn sẽ nhẹ nhàng tắt thông báo và vờ như là nó chưa từng tồn tại? Đừng lo vì giờ đây SQLFluff cung cấp công cụ để tự động fix, tuy nhiên các bạn nên tự check lại “bằng cơm” để đảm bảo nhé.
Fix SQL bằng SQLFluff
SQLFluff cung cấp cho ta một file .sqlfluff
để cài đặt tùy chỉnh các thông số phù hợp với từng dự án và cơ sở dữ liệu.
Thông qua file .sqlfluff
này ta cũng có thể chỉ định hoặc loại trừ một số rule ra khỏi bộ rule có sẵn. Một hạn chế lớn là hiện nay SQLFluff chưa cung cấp công cụ để chúng ta tự tạo rule mới theo nhu cầu của dự án. Chúng ta chỉ có thể sử dụng và tùy chỉnh bộ rule có sẵn của SQLFluff.
Tương tự như Git có .gitignore
, Docker có .dockerignore
, SQLFluff cũng có .sqlfluffignore
để thêm vào hoặc loại trừ file hoặc folder cần kiểm tra.
Tùy chỉnh cài đặt thông qua file .sqlfluff
Tích hợp với CI/CD
Thông thường thì Linting là quá trình phân tính code để tìm ra lỗi, code không đúng chuẩn. Trường hợp code không đạt yêu cầu, lần build đó sẽ bị gắn cờ và cảnh báo, hoặc nếu làm chặt hơn thì sẽ không cho phép build.
Một tình huống cụ thể là một bạn member muốn push một câu query “SELECT * FROM …” lên server, pipeline build báo fail gửi lỗi về lại server. Điều này rất dễ làm vì SQLFluff có hỗ trợ exit code trong hàm lint khi kết quả check không đạt.
Tích hợp SQLFluff vào CI/CD
Ngoài giao diện command line đen thui xấu xí, SQLFluff còn ra mắt plugin trong vscode và giao diện online cho các bạn có thể dùng thử.
Cám ơn đội ngũ contributor đã đóng góp SQLFluff cho cộng đồng. SQLFluff dễ dàng cài đặt và sử dụng nên có thể áp dụng rộng rãi cho các dự án, giúp giảm effort trong việc review style và tập trung vào phần nghiệp vụ chính.