Looker 生態系:從 BigQuery 到 Explore

理解 BigQuery、LookML、Explore、積木(Blocks)四層架構的關係,
以及如何從零開始建立自己的 Looker 專案。

總覽:四層架構

第四層 — 使用者介面
Looker Explore / Dashboard
業務人員拖拉欄位、篩選、看圖表的地方
LookML 定義哪些欄位可以拖拉
第三層 — 語意模型
LookML(.lkml 設定檔)
把 SQL table 翻譯成業務看得懂的維度與指標
LookML 用 sql_table_name 指向 BQ table
第二層 — 資料倉庫
BigQuery
你的交易、會員、行為等原始資料都存在這裡
Looker 透過 Connection 連線
加速器
Looker 積木(Blocks)
官方或社群的預建 LookML 模組,可安裝或參考

一句話版本

BigQuery 存資料 → LookML 定義「怎麼看」→ Explore 讓人「動手看」→ 積木 是別人寫好的 LookML 範本,省你從零開始。

BigQuery — 資料住在這裡

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 — 語意翻譯層

LookML 是 Looker 專屬的設定語言(不是 SQL,但裡面會嵌入 SQL 片段)。它做的事情是:

LookML 有三個核心概念,由下往上分別是:

View — 描述一張表

一個 View 對應一張 BQ table(或一段 derived SQL)。你在 view 裡定義 dimensions(維度,用來分群、篩選)和 measures(指標,用來聚合計算)。

views/order_items.view.lkml
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 BYWHERE 的條件。

Measure(指標)= 需要聚合的數字。例如 SUM(sale_price)COUNT(DISTINCT order_id)。Looker 會根據使用者選了哪些 dimension 來自動決定 GROUP BY

Explore — 組合多張表

把一個或多個 view 組合起來,定義 join 關係。這決定了使用者在 Explore 介面能看到哪些欄位、能怎麼交叉分析。

explores/order_analysis.explore.lkml
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 — 最頂層容器

一個 Model 綁定一個 Connection,並 include 所有 view 和 explore 檔案。它是整個 LookML 專案的入口。

models/my_project.model.lkml
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。

Looker Explore — 使用者的互動介面

Explore 是 Looker 的核心功能,業務人員在這裡自助分析資料:

重點:Explore 裡每一個可以拖拉的欄位,都是你在 LookML 裡寫過的 dimension 或 measure。沒定義的欄位,使用者看不到。這就是 LookML 的核心價值 — 你控制業務人員能看到什麼、數字怎麼算

SQL 使用者的直覺對照

你寫 SQL 時,自己決定 SELECTJOINGROUP BYWHERE

LookML 讓你預先定義好這些邏輯,使用者只要點選欄位,Looker 自動組裝成正確的 SQL。

可以這樣理解:LookML = 把你的 SQL 知識封裝成 UI 控件

Explore 背後發生的事

當使用者在 Explore 裡選了「月份」和「總營收」,Looker 會:

  1. 讀取 LookML,找到對應的 dimension 和 measure 定義
  2. 自動產生 SQL:SELECT month, SUM(sale_price) FROM ... GROUP BY month
  3. 透過 Connection 送去 BigQuery 執行
  4. 把結果拉回來,顯示成表格或圖表

使用者不需要會 SQL,但你(Developer)要透過 LookML 確保 SQL 邏輯正確。

Looker 積木(Blocks)— 預建模組

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 專案結構

一個典型的 LookML 專案在 Git repo 裡的結構長這樣:

my-looker-project/
├── manifest.lkml ← 專案設定(project_name)
├── models/
│ └── my_project.model.lkml ← 綁 connection + include
├── views/
│ ├── order_items.view.lkml ← 每張表一個 view
│ ├── members.view.lkml
│ └── products.view.lkml
├── explores/
│ └── order_analysis.explore.lkml ← 組合 view + join
├── dashboards/ ← 可選:用 LookML 定義 dashboard
└── docs/

開發者在本地或 Looker IDE 裡編輯這些 .lkml 檔案,commit 到 Git repo 後,在 Looker 裡 deploy 就會生效。

開發流程

確認 BQ table 寫 View 寫 Explore Deploy & 驗證

Step 1 — 確認 BQ table 結構

在 BigQuery console 看你要做的表有哪些欄位、資料型別、數據量。確認 table 的完整路徑(project.dataset.table)。

Step 2 — 寫 View

views/ 目錄新增 .view.lkml 檔案。定義有意義的 dimensions 和 measures。好的 view 不是把所有欄位都列出來,而是只暴露業務需要的欄位,加上清楚的 label 和適當的格式化。

Step 3 — 寫 Explore

explores/ 目錄新增 .explore.lkml。如果只有一張表,explore 很簡單;多張表就需要定義 join 條件。

Step 4 — Deploy & 驗證

Git commit & push 後,在 Looker IDE 點 Deploy to Production。然後去 Explore 介面實際操作,確認:

開發環境 vs 正式環境

Looker 有 Development Mode。開啟後,你的 LookML 變更只有自己看得到,不影響其他人。驗證沒問題後再 deploy 到 production,所有人才會看到更新。

常見新手陷阱