昨天,我們申請了 dbt Cloud 的帳號,並建立了專案。
dbt Cloud 的功能主要分為 Develop(開發) 和 Deploy(佈署)兩塊。
這幾天我們會從 Develop 的部份開始。先開發專案,才有東西可以佈署。
由首頁點擊 Develop 就可以進入 Cloud IDE。
可以看到我們昨天剛建立的專案,因為是第一次開啟,左下角的 File Explorer 沒有任何檔案。
按下 Initialize dbt project 後,系統會自動產生預設的資料夾結構及檔案。
再來,執行第一次的 Commit and sync。
dbt Cloud 幫我們保護 main branch(主分支),即使在 GitHub 沒有設定成 protected,dbt Cloud 也不會讓我們直接 push 到 main branch。建議的開發/佈署流程是 push 到別的分支,透過 Pull Request,才能 merge 到 main branch。因此,我們需要另外建一個分支。
按下 Create branch,輸入新的分支名稱,例如 demo
。
File Explorer 中,最常用到的資料夾是 models,裡面的每個 .sql 檔案,在 dbt 的名稱叫做 model。
現在我們要來建立第一個 dbt model。
由 models 目錄,按右邊的三個點,或按右鍵,點選 Create File。
檔案名稱取 customers.sql
由左側 File Explorer 點一下該檔案開啟 IDE,將以下語法貼進去
原始來源:Quickstart for dbt Cloud and BigQuery - Build your first model
with customers as (
select
id as customer_id,
first_name,
last_name
from `dbt-tutorial`.jaffle_shop.customers
),
orders as (
select
id as order_id,
user_id as customer_id,
order_date,
status
from `dbt-tutorial`.jaffle_shop.orders
),
customer_orders as (
select
customer_id,
min(order_date) as first_order_date,
max(order_date) as most_recent_order_date,
count(order_id) as number_of_orders
from orders
group by 1
),
final as (
select
customers.customer_id,
customers.first_name,
customers.last_name,
customer_orders.first_order_date,
customer_orders.most_recent_order_date,
coalesce(customer_orders.number_of_orders, 0) as number_of_orders
from customers
left join customer_orders using (customer_id)
)
select * from final
並按右上角的 Save 存檔。
如果按右下區塊的 Preview,可以預覽資料
models/example/ 這個資料夾底下的東西用不到了,可以刪除。
在資料夾按右鍵,或按旁邊的三個點,選擇 Delete。
dbt_project.yml 是這個 dbt 專案的主設定檔。
現在我們要來更新專案名稱。
初始專案時預設的名稱是 my_new_project。我們要來把名稱改為 jaffle_shop。
打開 dbt_project.yml,將
name: 'my_new_project'
更改為
name: 'jaffle_shop'
最下面的
models:
my_new_project:
改成
models:
jaffle_shop:
小技巧:將 my_new_project 選起來,按 ctrl + F2,可以一次修改兩個地方。
最後,因為我們已經將 example models 刪除,所以設定檔對應的部份也需要刪除:
example:
materialized: view
改完之後如圖
我們所使用的 BigQuery 資料集 Jaffle Shop 是 dbt 官方的範例資料。
Jaffle Shop 是一間虛擬的商店,資料包含虛擬的銷售及顧客資料。
而另一個資料集 Stripe 則是虛擬的金流資料。
Jaffle 就是熱壓土司,大部分的台灣人應該都知道是什麼。
看似西方食物,但我認識的一些美國人卻沒聽過/吃過。查了一下發現源自澳洲。
我去 YouTube 搜尋 Jaffle,點了好幾個影片都不是美國腔。
好不容易點到一個美國人拍的影片,一開頭,其中一個人就問他的夥伴,你有聽過 Jaffle 嗎?
果然 Jaffle 不是一個美國人熟悉的食物。
昨天我們剛建立的專案裡面什麼都沒有。
經過今天的初始化之後,已經有了基本的結構、檔案、還有主設定檔。
再來我們也建了第一個 model,重新命名專案,刪除預設的 examples。
結束前,我們再次 Commit,提交今天的異動。
明天的主題:Modularize Our dbt Models,將 dbt model 模組化。
歡迎加入 dbt community
對 dbt 或 data 有興趣 👋?歡迎加入 dbt community 到 #local-taipei 找我們,也有實體 Meetup 請到 dbt Taipei Meetup 報名參加