LookML 是一种在 SQL 数据库中描述维度、聚合、计算和数据关系的语言。Looker 使用以 LookML 编写的模型针对特定数据库构建 SQL 查询。
LookML 项目
LookML 项目是模型、视图和信息中心文件的集合,通常通过 Git 代码库一起进行版本控制。模型文件包含关于应使用哪些表以及如何将它们联接在一起的信息。视图文件包含有关如何计算每个表的信息(如果联接允许,还可以跨多个表计算信息)。
LookML 将结构与内容分离开来,因此查询结构(表的联接方式)与查询内容(要访问的列、派生字段、要计算的聚合函数以及要应用的过滤表达式)无关。
Looker 生成的 SQL 查询
对于数据分析师,LookML 会培养 DRY 样式(“不要重复自己”),这意味着您在一个位置编写一次 SQL 表达式,并且 Looker 会重复利用代码生成临时 SQL 查询。对企业用户而言,最终就是能够在 Looker 中构建复杂查询,并且仅专注于所需内容,而不是 SQL 结构的复杂性。
下图显示了一个在 Looker 中构建的查询,该查询连接了多个表(订单商品、产品和用户)中的值:
在上图中,最终用户不需要了解 SQL 表达式以进行联接或过滤。
用于描述数据结构的依赖项语言
LookML 是依赖项语言(如 make),而不是 C 或 Ruby 等命令式语言。LookML 为数据建模提供预定义的数据类型和语法。LookML 语法结构清晰且易于学习。(您不需要有编程语言方面的经验,此处包含所有您需要的信息。)LookML 独立于特定的 SQL 方言,并封装 SQL 表达式以支持任何 SQL 实现。
代码示例
以下示例展示了电子商务商店的最小 LookML 项目,其中包含一个模型文件和两个视图文件:
######################################
# 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 区分大小写
LookML 区分大小写,因此在引用 LookML 元素时,请确保大小写一致。如果您引用的某个元素不存在,Looker 会向您发出提醒。在下面的示例中,开发者错误地将“FlightS”的首字母大写。Looker IDE 会显示一条警告,提示 e_FLIGHTS_pdt
不存在。此外,Android Studio 还会建议现有“探索”的名称,即 e_flights_pdt
:
不过,如果您的项目同时包含 e_FLIGHTS_pdt
和 e_flights_pdt
,Looker IDE 将无法更正您的错误,因此您必须确定想要使用的版本。一般而言,在为 LookML 对象命名时继续使用小写。
IDE 文件夹名称也区分大小写。每当您指定文件路径时,都必须匹配文件夹名称的大小写。例如,如果您有一个名为 Views
的文件夹,则必须在 include
参数中使用相同的大小写形式。同样,如果您的大小写与项目中的现有文件夹不匹配,Looker IDE 会提示错误:
基本 LookML 元素概览
下图显示了基本的 LookML 元素及其关系。如需了解详情,请参阅 LookML 术语和概念。