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. 左侧导航面板中的“探索”面板按模型名称进行整理。每个模型名称下方都有一个列表中列出了相应模型中定义的可用 Explore
  2. 用户可以搜索特定的探索。
  3. 开发者可以为探索定义说明,用户只需将鼠标悬停在探索菜单中的探索名称上即可查看这些说明。

  4. 字段选择器窗格按视图名称进行整理。每个视图名称下都列出了相应视图中包含的表中的可用字段。大多数视图都会显示维度度量。此示例从视图文件中定义的退回日期维度组中选择月份维度。

  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 查询、过滤和深入分析数据,建议您参阅以下资源:

在深入了解 LookML 之前,先回顾一下 SQL 基础知识

编写 LookML 需要了解 SQL 查询。您无需是 SQL 专家,即使是初学者也能创建强大的 Looker 模型。不过,一般来说,您对 LookML 的了解越深入,就越能从对 SQL 的深入了解中获益。

如果您需要复习 SQL,不妨参考以下我们推荐的一些资源:

了解 LookML 基础知识

这些资源将帮助您快速掌握 LookML 知识。您可以使用学习账号来尝试不同的设计模式。

在学习了 LookML 基础知识后,请参阅以下页面,了解不同类型的 LookML 参数: