Lời mở đầu
Ở bài trước - Giới thiệu DBT - mình đã đề cập đến việc dùng dbt kết nối và làm việc với các data platform khác. Hôm nay mình sẽ kết nối đến và thực hiện một vài thao tác cơ bản đến Google Big Query - một trong những Data platform phổ biến nhất thời điểm hiện tại.
Trong bài, mình sẽ dùng một dataset mẫu để mô phỏng quá trình. Dataset tên là jaffle_shop
. Nếu bạn thực hành với dataset khác, thao tác tương tự 🥲.
Các setup cần thiết
Để có thể sử dụng một công cụ nào đó, đương nhiên là trước tiên bạn phải cài đặt rồi 😄
- Với dbt, mình đã hướng dẫn cài dbt ở bài trước, dùng pip đơn giản:
pip install dbt-core dbt-bigquery
Sau đó, kiểm tra lại với lệnh:
dbt --version
- Với Big query, mình sẽ nói ngắn gọn các thao tác cần thiết, chi tiết các bạn có thể tìm đọc các trang hướng dẫn Big Query cơ bản... Trước hết, bạn cần phải có tài khoản Google trước, sau đó truy cập BigQuery Console, tạo một project mới đặt tên gì cũng được. Sau đó, hãy thử với câu query cơ bản sau khi tạo project:
select * from `dbt-tutorial.jaffle_shop.customers`;
Nếu không có gì sai thì result sẽ như sau:
Sau khi thử chạy thành công trên console của Big query, hãy tạo một dataset
mới (hướng dẫn), ở đây mình đặt là jaffle_shop
. Ai đã làm việc với Big query sẽ biết dataset
tương đương với database
hoặc schema
trong các hệ cơ sở dữ liệu cơ bản. Các bước tiếp theo là Tạo Credential Trong Big query, cuối cùng là download keyfile dạng JSON về. Keyfile JSON có format như sau:
{ "type": "service_account", "project_id": "PROJECT_ID", "private_key_id": "KEY_ID", "private_key": "-----BEGIN PRIVATE KEY-----\nPRIVATE_KEY\n-----END PRIVATE KEY-----\n", "client_email": "SERVICE_ACCOUNT_EMAIL", "client_id": "CLIENT_ID", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://accounts.google.com/o/oauth2/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/SERVICE_ACCOUNT_EMAIL"
}
Vậy là OK phần setup chuẩn bị các thứ rồi 😁, giờ hãy đến phần chính nào!
Kết nối dbt đến Big query
Tạo project với dbt
Di chuyển đến thư mục bạn muốn tạo project, chạy lệnh sau:
dbt init jaffle_shop
Như đã nói, mình sẽ lấy tên project là jaffle_sshop
, bạn có thể đặt tên khác tùy ý. Hãy mở project vừa tạo lên, ở đây mình sử dụng VS-Code. Bạn sẽ thấy những file và folder được tạo trong thư mục project, mỗi file và folder đảm nhận chức năng khác nhau và cần thiết cho project.
Ý nghĩa các file và folder trong thư mục project
- analyses: thư mục hỗ trợ tổ chức các truy vấn SQL phân tích trong dự án, chứa các script sql mà analytic cần, cơ mà nó chỉ compile chứ không có excute.
- macros: chứa các block code có thể tái sử dụng nhiều lần, tiện lợi đỡ phí thời gian, viết 1 lần rồi thích gọi ở đâu cũng được.
- models: là thư mục quan trọng nhất của project, đơn giản bởi vì nó là folder chứa các model )). Mỗi file .sql trong folder này là một model (có thể là table, view, ...). Khi chạy
dbt run
sẽ tự generate model và insert data. - seeds: chứa các file .csv, static data, giúp load data từ file vào các data platform thuận tiện hơn.
- snapshots: giúp chứa snapshot data của một table tại một thời điểm nào đó nếu dữ liệu các bảng có thể bị thay đổi.
- tests: đơn giản như cái tên 😀, chứa các query bạn dùng để test các model và resource. Khi chạy
dbt test
sẽ giúp bạn test tự động. - dbt_project.yml: file config quan trọng không thể thiếu của project, chứa các thông tin như
name
,version
,profile
,path
,vars
, ... cần thiết cho chạy dự án.
Tạm thời khi mới khởi tạo project thì chỉ có vậy, nhưng sau khi bạn thực hiện kết nối, sẽ có thêm vài file và folder sinh ra thêm như seed
, logs
, target
, ... Cơ mà lười giải thích nên để sau nhé 😌
Thực hiện kết nối
DBT sẽ thực hiện kết nối đến Data warehouse sử dụng profile. Nó được định nghĩa trong một file gọi là profiles.yml
, trong đó chứa tất cả các thông tin chi tiết cần thiết để thực hiện kết nối đến data warehouse. Ở thư mục ~/.dbt
(nếu là linux) hoặc C:\Users\Username\.dbt
(nếu là windows), bạn hãy tạo file profiles.yml
. Sau đó, hãy copy file JSON chứa key đã tải ở phần trên vào cùng thư mục này, tiếp theo hãy copy và sửa các giá trị cho phù hợp.
jaffle_shop: # this needs to match the profile in your dbt_project.yml file target: dev outputs: dev: type: bigquery method: service-account keyfile: # replace this with the full path to your keyfile project: # Replace this with your project id dataset: # Replace this with dbt_your_name threads: 1 timeout_seconds: 300 location: US priority: interactive
- Note: Tại sao lại để
profiles.yml
ngoài thư mục project? Đó là bởi vì lý do hạn chế cácsensitive credentials
(các thông tin nhạy cảm) bị check bởi các công cụ version control. Thực ra thì bạn có thể để chung với thư mục project cũng được với điều kiện là nên sử dụng các environment variables (biến môi trường) để load cácsensitive credentials
. Còn nếu để ngoài thì dbt sẽ tự động tìm trong thư mục~/.dbt
.
Ô cê, cuối cùng hãy vào thư mục chứa project và chạy:
dbt debug
Và nếu kết quả hiển thị như lày là bạn đã kết nối thành công rồi!!
Connection test: OK connection ok
Vậy là thành công kết nối dbt đến Big Query rồi, các bạn có thể thực hiện các công việc như build model, load data, chạy test, schedule jobs, ...Có thể mình sẽ hướng dẫn ở những bài tiếp theo. Rất đơn giản phải khum 😉. Chúc các bạn kết nối thành công nhé!