理解 BigQuery、LookML、Explore、積木(Blocks)四層架構的關係,
以及如何從零開始建立自己的 Looker 專案。
一句話版本
BigQuery 存資料 → LookML 定義「怎麼看」→ Explore 讓人「動手看」→ 積木 是別人寫好的 LookML 範本,省你從零開始。
BigQuery 是 Google Cloud 的資料倉庫服務。你的交易紀錄、會員資料、行為事件等結構化資料都存在 BigQuery 的 tables 裡。
Looker 本身不存資料。它透過 Connection(連線設定)連到 BigQuery,每次有人在 Explore 拖拉欄位,Looker 就自動產生 SQL 去 BQ 執行,把結果拿回來顯示。
Connection 是什麼?
Connection 是 Looker 與 BigQuery 之間的通道。它記錄了 GCP 專案 ID、認證方式、預設 dataset 等資訊。由 Looker 管理員(通常是基礎設施團隊)設定,開發者在 LookML model 裡引用它的名稱即可。
每個 Connection 會綁定一個 GCP billing project。查詢的費用(BigQuery on-demand 計價)會計入這個 project。因此一個組織可能有多個 Connection,分別綁不同的 billing project。
LookML 是 Looker 專屬的設定語言(不是 SQL,但裡面會嵌入 SQL 片段)。它做的事情是:
member_id → 「會員編號」)LookML 有三個核心概念,由下往上分別是:
一個 View 對應一張 BQ table(或一段 derived SQL)。你在 view 裡定義 dimensions(維度,用來分群、篩選)和 measures(指標,用來聚合計算)。
view: order_items {
sql_table_name: `my-gcp-project.ecommerce.order_items` ;;
dimension: order_id {
type: number
sql: ${TABLE}.order_id ;;
primary_key: yes
}
dimension_group: created {
type: time
timeframes: [date, week, month, year]
sql: ${TABLE}.created_at ;;
}
dimension: sale_price {
type: number
sql: ${TABLE}.sale_price ;;
value_format_name: decimal_0
}
measure: total_revenue {
label: "總營收"
type: sum
sql: ${sale_price} ;;
value_format_name: decimal_0
}
measure: order_count {
label: "訂單數"
type: count_distinct
sql: ${order_id} ;;
}
measure: average_order_value {
label: "客單價"
type: number
sql: ${total_revenue} / NULLIF(${order_count}, 0) ;;
value_format_name: decimal_0
}
}
Dimension vs Measure
Dimension(維度)= 分群用的欄位。例如日期、城市、會員等級。它不會被聚合,用來當 GROUP BY 或 WHERE 的條件。
Measure(指標)= 需要聚合的數字。例如 SUM(sale_price)、COUNT(DISTINCT order_id)。Looker 會根據使用者選了哪些 dimension 來自動決定 GROUP BY。
把一個或多個 view 組合起來,定義 join 關係。這決定了使用者在 Explore 介面能看到哪些欄位、能怎麼交叉分析。
include: "/views/*.view.lkml"
explore: order_items {
label: "訂單分析"
description: "訂單明細與營收分析,可交叉會員屬性"
join: members {
type: left_outer
sql_on: ${order_items.member_id} = ${members.member_id} ;;
relationship: many_to_one
}
}
一個 Model 綁定一個 Connection,並 include 所有 view 和 explore 檔案。它是整個 LookML 專案的入口。
connection: "my-bq-connection"
include: "/views/*.view.lkml"
include: "/explores/*.explore.lkml"
LookML 檔案都存在 Git repo
所有 .lkml 檔案都存在 Git repository(GitLab / GitHub)。Looker IDE 會連到這個 repo,開發者改完 LookML 後 commit & deploy,Explore 介面就會更新。這讓 LookML 的變更有版本控制、可 code review。
Explore 是 Looker 的核心功能,業務人員在這裡自助分析資料:
重點:Explore 裡每一個可以拖拉的欄位,都是你在 LookML 裡寫過的 dimension 或 measure。沒定義的欄位,使用者看不到。這就是 LookML 的核心價值 — 你控制業務人員能看到什麼、數字怎麼算。
SQL 使用者的直覺對照
你寫 SQL 時,自己決定 SELECT、JOIN、GROUP BY、WHERE。
LookML 讓你預先定義好這些邏輯,使用者只要點選欄位,Looker 自動組裝成正確的 SQL。
可以這樣理解:LookML = 把你的 SQL 知識封裝成 UI 控件。
當使用者在 Explore 裡選了「月份」和「總營收」,Looker 會:
SELECT month, SUM(sale_price) FROM ... GROUP BY month使用者不需要會 SQL,但你(Developer)要透過 LookML 確保 SQL 邏輯正確。
Looker Blocks 是 Google 官方或社群維護的預建 LookML 專案。它們針對常見資料源提供現成的 view、explore、dashboard。
| 積木 | 對應資料源 | 包含內容 |
|---|---|---|
| GA4 Block | GA4 BigQuery Export | Session / Event / User / Ecommerce views + dashboards |
| Google Ads Block | Google Ads Transfer | Campaign / Ad Group / Keywords views |
| Salesforce Block | Salesforce | Opportunity / Account / Lead views |
| BigQuery Audit | BQ INFORMATION_SCHEMA | 查詢成本、Slot 使用量監控 |
什麼時候用積木?什麼時候自己寫?
用積木:資料源是業界標準格式(GA4、Google Ads、Salesforce 等),且你不需要大幅客製。
自己寫:資料結構是公司自有的(自建的交易表、會員表、行為表),或需要高度客製化的指標邏輯。
大多數企業的核心業務資料都是自己寫,再搭配幾個官方積木處理標準數據源。
| 層 | 角色 | 類比 | 誰負責 |
|---|---|---|---|
| BigQuery | 資料倉庫,存原始資料 | 資料庫 | Data Engineer |
| LookML | 語意模型,定義怎麼看資料 | 資料字典 + SQL 範本庫 | LookML Developer(你) |
| Explore | 互動式查詢 UI | 像 Pivot Table,但更強 | 所有人(拖拉使用) |
| 積木 | 預建 LookML 模組 | npm package / 範本專案 | Google / 社群 / 你自建 |
一個典型的 LookML 專案在 Git repo 裡的結構長這樣:
開發者在本地或 Looker IDE 裡編輯這些 .lkml 檔案,commit 到 Git repo 後,在 Looker 裡 deploy 就會生效。
在 BigQuery console 看你要做的表有哪些欄位、資料型別、數據量。確認 table 的完整路徑(project.dataset.table)。
在 views/ 目錄新增 .view.lkml 檔案。定義有意義的 dimensions 和 measures。好的 view 不是把所有欄位都列出來,而是只暴露業務需要的欄位,加上清楚的 label 和適當的格式化。
在 explores/ 目錄新增 .explore.lkml。如果只有一張表,explore 很簡單;多張表就需要定義 join 條件。
Git commit & push 後,在 Looker IDE 點 Deploy to Production。然後去 Explore 介面實際操作,確認:
開發環境 vs 正式環境
Looker 有 Development Mode。開啟後,你的 LookML 變更只有自己看得到,不影響其他人。驗證沒問題後再 deploy 到 production,所有人才會看到更新。