- vừa được xem lúc

[dbt basic] [P2] Setup project dbt cơ bản với Postgresql

0 0 4

Người đăng: Minh Tuan

Theo Viblo Asia

Lời mở đầu

Phần trước mình đã giải thích dbt là gì, và tại sao nên dùng dbt. Trong phần này, mình sẽ đi qua cách setup 1 project dbt cơ bản với postgresql. Nếu ai chưa đọc phần trước, có thể đọc tại đây

Cài đặt dbt

Để cho đơn giản, mình sẽ cài dbt bằng pip

pip install dbt-core

Ngoài ra, còn cần cài thêm module support cho việc connect tới các data platform cần dùng. Ví dụ ở đây mình dùng postgresql, mình sẽ cài thêm

 pip install dbt-postgres

Mọi người có thể tự tìm module tương ứng ở document dbt nhé

Các component bắt buộc trong dbt project

dbt_project.yml

File này cần được để ở root directory của project. File chứa các thông tin về cấu hình project.

Đầu tiên, các field name, version, config-version, profile là bắt buộc. Ngoài ra, như đã giải thích ở phần trước, dbt project bao gồm chính là các model, vậy nên model-paths cũng bắt buộc (relative path dẫn tới folder chứa các model).

dbt mặc định sau khi transform sẽ write vào VIEW ở warehouse. Phần cấu hình +materialized: table nhằm mục đích write vào TABLE thay vì VIEW. Ngoài ra, user có thể chọn write ra MATERIALIZED VIEW, ... tùy chọn, và cũng có thể cấu hình destination cho từng sub-directory trong folder models.

name: 'dbt_lab'
version: '1.1.0'
config-version: 2 profile: "{{ env_var('DBT_PROFILE', 'tuandz') }}" model-paths: ["models"]
test-paths: ["tests"]
macro-paths: ["macros"] models: dbt_lab: +materialized: table

profiles.yml

File này chứa các dbt profile, mỗi profile bao gồm thông tin để connect tới data platform, ví dụ host, port, user, password, ... Tại sao cần nhiều profile ư? Giống như môi trường dev, test, prod, ... mỗi profile để connect tới 1 warehouse riêng. Khi user chạy, có thể chọn profile qua field profile ở file dbt_project.yml.

tuandz: target: dev outputs: dev: type: postgres host: localhost user: postgres password: postgres port: 5432 dbname: postgres schema: public connect_timeout: 10 # default 10 seconds retries: 3

Chi tiết cấu hình connection cho từng loại data platform có thể đọc ở đây

Khởi tạo các model

Tạo folder models (cùng tên với value của field model-paths ở trên), sau đó có 2 việc cần làm

Cấu hình sources (optional): trong dbt, có thể code tên table bằng function {{ source() }}. Cái này cũng giống như sử dụng variable trong code vậy, thay vì cứ viết đi viết lại <table schema>.<table name>, user có thể cấu hình source cho tiện

Trong folder models, tạo folder sources. Trong folder này, các file định nghĩa source là các file yml, tạo sub-directory thoải mái (tạo nhiều file thoải mái).

image.png

name là tên source (đặt là cái gì cũng được). Table được refer bằng cách dùng {{ source('<source name>', '<table name>') }}. Lưu ý là table phải được khai báo trong source rồi mới có thể dùng được (ví dụ table urls_69 chưa được khai báo ở source dưới thì không dùng được)

version: 2 sources: - name: tuandz_db database: postgres schema: public tables: - name: news_urls - name: urls_2

Viết model: Trong folder models, mỗi file SQL đại diện cho 1 model (không để trong sources). File SQL viết như SQL bình thường, tương ứng với SQL syntax của data platform được chọn (ở đây là Postgresql). Code model chỉ là SELECT, không cần CREATE, INSERT, ... gì cả, phần insert lại vào data platform được dbt handle, mình không cần lo.

Ví dụ, model của mình có thể viết như sau

SELECT * FROM {{ source('tuandz_db', 'urls_2') }}

Để chạy model, đứng ở root directory và run command để chạy toàn bộ model đang có

dbt run --project-dir ./

Tips:

  • Có thể export env variable DBT_PROJECT_DIR để đỡ phải gắn flag --project-dir
  • Để chạy 1 số model thay vì chạy toàn bộ, add flag --select "model1,model2"

Sau khi run thành công, table/view/materialized view tương ứng sẽ được tạo trong data platform, với tên là tên model (tên file SQL). Để đổi tên table thay vì dùng tên default là tên file sql, thêm phần sau vào đầu file sql

{{ config( alias="tuandz_new_table_name" )
}}

Bình luận

Bài viết tương tự

- vừa được xem lúc

002: Hiểu về Index để tăng performance với PostgreSQL P1

Bài viết nằm trong series Performance optimization với PostgreSQL. Từ bài này sẽ liên quan nhiều đến practice nên các bạn chuẩn bị env và data trước.

0 0 504

- vừa được xem lúc

003: Hiểu về Index để tăng performance với PostgreSQL P2

Bài viết nằm trong series Performance optimization với PostgreSQL. . . B-Tree index.

0 0 539

- vừa được xem lúc

004: Hiểu về Index để tăng performance với PostgreSQL P3

Bài viết nằm trong series Performance optimization với PostgreSQL. . 1) What. Trước khi đi vào chi tiết, cùng xem lại nhiệm vụ, tính chất của hash function:.

0 0 126

- vừa được xem lúc

Hiểu về Join để tăng performance với PostgreSQL

Bài viết nằm trong series Performance optimization với PostgreSQL. Chúng ta biết có 4 loại join cơ bản sau:. . .

0 0 188

- vừa được xem lúc

006: Partitioning data với PostgreSQL P1

Bài viết nằm trong series Performance optimization với PostgreSQL. 1) Horizontal & Vertical partitioning.

0 0 74

- vừa được xem lúc

007: Partitioning data với PostgreSQL P2

Bài viết nằm trong series Performance optimization với PostgreSQL. . . Partition by list.

0 0 93