LookML 簡介

LookML 是 Looker 模型語言的簡稱,用於在 Looker 中建立語意資料模型。您可以使用 LookML 描述 SQL 資料庫中的維度、匯總、計算和資料關係。Looker 會使用以 LookML 編寫的模型,針對特定資料庫建構 SQL 查詢。

LookML 是類似 make 的依附元件語言,而非 C 或 Ruby 等命令式語言。LookML 提供預先定義的資料類型和語法,用於資料建模。您不需要有程式設計語言的相關經驗,也能瞭解 LookML。LookML 與特定 SQL 方言無關,且會封裝 SQL 運算式,支援任何 SQL 實作項目。

對資料分析師而言,LookML 採用 DRY 樣式 (「不要重複自己」),也就是說,您只需在一個位置撰寫一次 SQL 運算式,Looker 就會重複使用該程式碼來產生臨時 SQL 查詢。商務使用者接著就能在 Looker 中使用結果建立複雜查詢,只專注於所需內容,不必理會 SQL 結構的複雜性。

LookML 專案

LookML 是在專案中定義,LookML 專案是一系列的檔案,至少包含模型和檢視檔案,以及視需要加入的其他類型檔案,通常會透過 Git 存放區一起進行版本控管。模型檔案包含專案將使用的資料表,以及資料表的聯結方式。檢視檔案會說明如何計算每個資料表 (或多個資料表,如果聯結允許的話) 的資訊。

LookML 會將結構與內容分開,因此查詢結構 (資料表的聯結方式) 與查詢內容 (要存取的資料欄、衍生欄位、要計算的匯總函式,以及要套用的篩選運算式) 無關。

Looker 查詢是以 LookML 專案檔案為基礎。資料分析師會使用 LookML 建立及維護資料模型,定義所分析資料的資料結構和業務規則。Looker SQL 產生器會將 LookML 轉換為 SQL,讓業務使用者不必編寫任何 LookML 或 SQL 即可查詢。

業務使用者會使用 Looker 查詢建立工具或探索介面,根據 Looker 分析師定義的資料模型建立查詢。使用者可以選取維度、指標和篩選器,根據自己的問題建立自訂查詢,並產生自己的洞察資料。

使用者建立查詢時,系統會將查詢傳送至 Looker SQL 產生器,並將查詢翻譯成 SQL。系統會針對資料庫執行 SQL 查詢,然後 Looker 會在「探索」介面中,將格式化結果傳回給使用者。使用者接著就能將結果視覺化,並產生洞察資料。

如要進一步瞭解專案中的基本 LookML 元素,以及這些元素之間的關係,請參閱「LookML 術語和概念」。

使用者看到的內容

專案的設定方式和檔案的具體內容,會決定使用者看到的內容,以及與 Looker 的互動方式。

  1. 左側導覽面板中的「探索」面板會依模型名稱整理。每個模型名稱下方都會列出該模型中定義的可用探索
  2. 使用者可以搜尋特定探索。
  3. 開發人員可以定義探索的說明,使用者只要將游標懸停在「探索」選單中的探索名稱上,即可查看說明。

  4. 「欄位挑選器」窗格會依檢視畫面名稱整理。每個檢視畫面名稱下方都會顯示該檢視畫面所含資料表中的可用欄位清單。大多數檢視畫面都會顯示維度指標。這個範例會從檢視區塊檔案中定義的「Returned Date」維度群組,選取「Month」維度。

  5. 使用者可以選取多個做為查詢依據的指標。

  6. 使用者可以在欄位挑選器窗格中套用篩選器和樞紐等選項。

  7. 使用者可以修正查詢字詞。

  8. 使用者可以選擇要套用至查詢結果的視覺化類型

  9. 執行這項探索會產生 SQL 查詢,並傳回資料表和視覺化圖表,顯示過去一年內退回訂單的總銷售價格和總毛利率。

程式碼範例

以下程式碼範例顯示電子商務商店的最小 LookML 專案,其中包含模型檔案 (ecommercestore.model.lkml) 和兩個檢視檔案 (orders.view.lkmlcustomers.view.lkml):

######################################
# FILE: ecommercestore.model.lkml    #
# Define the explores and join logic #
######################################
connection: order_database
include: "*.view.lkml"
explore: orders {
  join: customers {
    sql_on: ${orders.customer_id} = ${customers.id} ;;
  }
}

##########################################################
# FILE: orders.view.lkml                                 #
# Define the dimensions and measures for the ORDERS view #
##########################################################
view: orders {
  dimension: id {
    primary_key: yes
    type: number
    sql: ${TABLE}.id ;;
  }
  dimension: customer_id {      # field: orders.customer_id
    sql: ${TABLE}.customer_id ;;
  }
  dimension: amount {           # field: orders.amount
    type: number
    value_format: "0.00"
    sql: ${TABLE}.amount ;;
  }
  dimension_group: created {                # generates fields:
    type: time                              # orders.created_time, orders.created_date
    timeframes: [time, date, week, month]   # orders.created_week, orders.created_month
    sql: ${TABLE}.created_at ;;
  }
  measure: count {             # field: orders.count
    type: count                # creates a sql COUNT(*)
    drill_fields: [drill_set*] # list of fields to show when someone clicks 'ORDERS Count'
  }
  measure: total_amount {
    type: sum
    sql: ${amount} ;;
  }
  set: drill_set {
    fields: [id, created_time, customers.name, amount]
  }
}

#############################################################
# FILE: customers.view.lkml                                 #
# Define the dimensions and measures for the CUSTOMERS view #
#############################################################
view: customers {
  dimension: id {
    primary_key: yes
    type: number
    sql: ${TABLE}.id ;;
  }
  dimension: city {                    # field: customers.city
    sql: ${TABLE}.city ;;
  }
  dimension: state {                   # field: customers.state
    sql: ${TABLE}.state ;;
  }
  dimension: name {
    sql: CONCAT(${TABLE}.firstname, " ", ${TABLE}.lastname) ;;
  }
  measure: count {             # field: customers.count
    type: count                # creates a sql COUNT(*)
    drill_fields: [drill_set*] # fields to show when someone clicks 'CUSTOMERS Count'
  }
  set: drill_set {                     # set: customers.drill_set
    fields: [id, state, orders.count]  # list of fields to show when someone clicks 'CUSTOMERS Count'
  }
}

其他資源

如果您是 LookML 開發新手,建議使用下列章節所述的資源,加快學習速度:

存取 Looker 的學習環境

歡迎查看 Google Cloud Skills Boost 課程。

瞭解如何使用 Looker 查詢及探索資料

瞭解如何在 Looker 中探索資料,對您以 LookML 建立資料模型有很大的幫助。如果您不熟悉如何使用 Looker 查詢、篩選及深入分析資料,建議參考下列資源:

先瞭解 SQL 基礎知識,再深入瞭解 LookML

撰寫 LookML 時,需要瞭解 SQL 查詢。您不必是 SQL 專家,即使是新手也能建立強大的 Looker 模型。但一般來說,您越深入瞭解 LookML,就越能從 SQL 知識中獲益。

如需 SQL 複習資料,請參考下列實用資源:

瞭解 LookML 基礎知識

這些資源可協助您快速掌握 LookML 知識。使用學習帳戶實驗不同的設計模式。

瞭解 LookML 基礎知識後,請參閱下列頁面,概略瞭解不同類型的 LookML 參數: