LookML 术语和概念

替代运算符 ($)范围和命名SQL 方言SQL 块部分已移至新的合并 SQL 并引用 LookML 对象文档页面。

概览

本页面定义了 LookML 开发中反复出现的术语和概念。下图显示了包含在其他元素中的元素之间的关系。以下部分定义了所有术语。

Looks用户定义的信息中心不在此图中,因为用户无需使用任何 LookML 即可创建它们。不过,它们的查询依赖于上图中显示的底层 LookML 元素。

LookML 项目

项目是一组 LookML 文件,用于描述数据库表之间的相互关系,以及 Looker 应如何解读这些表。每个 LookML 项目都位于各自的 Git 代码库中,以实现版本控制

以下是 LookML 项目中常见的文件类型:

  • 模型包含要使用的表及其应如何联接的信息。您通常会在此定义模型、探索和联接。
  • 视图包含如何访问或计算每个表(或多个联接表)中的信息。您在此处通常会定义视图、其维度、度量单位及其字段集。
  • “探索”通常在模型文件中定义,但有时您需要针对派生表使用单独的探索文件,或者需要扩展优化跨模型探索。
  • 清单文件可以包含使用从另一个项目导入的文件,或者使用项目的本地化设置的说明。

如需了解可在 LookML 项目中拥有的其他类型的文件,请参阅 LookML 项目文件文档页面。

将 Looker 连接到数据库后,您可以指定要用于 Looker 项目的数据库连接:

在 Looker 中,您可以在开发菜单下访问项目:

自 Looker 21.12 起,如果您的管理员已启用增强型导航实验室功能,您就可以在新的增强型左侧导航面板中选择开发选项来访问项目。

LookML 项目和文件来自哪里?

创建 LookML 文件的最常见方法是从数据库生成 LookML 项目。您还可以创建空白项目并手动创建其 LookML 文件,或者通过克隆现有 Git 代码库来创建项目

当您从数据库生成新项目时,Looker 会创建一组基准文件,供您用作构建项目的模板:

  • 多个 view 文件,数据库中的每个表都有一个文件。
  • 一个 model 文件。模型文件会为每个视图声明一个“探索”。每个探索声明都包含 join 逻辑,用于联接 Looker 确定与探索相关的任何视图。

在这里,您可以通过移除不需要的视图和“探索”以及添加自定义维度和指标来自定义项目。

主要的 LookML 结构

上图所示,一个项目通常包含一个或多个模型文件,这些文件包含定义模型及其“探索”和“联接”的参数。此外,项目通常包含一个或多个视图文件,每个文件都包含定义相应视图及其字段(包括维度和度量)和字段集的参数。该项目还可包含项目清单文件,其中包含使用其他项目的视图文件或配置本地化默认值的参数。本部分将介绍这些主要结构。

型号

模型是进入数据库的自定义门户,旨在为特定的商家用户提供直观的数据探索。单个 LookML 项目中的同一数据库连接可以有多个模型。每个模型可以向不同的用户公开不同的数据。例如,销售代理需要的数据与公司高管不同,因此您可能需要开发两种模型,以提供适合每位用户的数据库视图。

在 Looker 中,查询按查询所属的模型进行分组。用户会在探索菜单下看到下列模型:

从 Looker 21.12 开始,如果您的管理员启用了增强型导航实验室功能,您就可以在新的增强的左侧导航面板中选择探索选项来访问“探索”并查看探索列表。

模型文件用于指定要连接的数据库,并定义该连接的探索集合。按照惯例,每个文件只能声明一个模型,并且在新的 LookML 中,模型文件名会以 .model.lkml 结尾。模型文件的名称决定了 Looker 中显示的名称。

LookML 中常规形式的模型声明如下所示。如需了解详情,请参阅模型参数文档页面。

connection: connection_name
persist_for: timeframe
case_sensitive: yes | no
include: "filename_pattern"   # for example: *.view.lkml
# More include declarations

explore: explore_name {
  view_name: view_name
  join: view_name {
    # join parameters
  }
  # More join declarations
}
# More explore declarations

查看

数据视图声明可定义一系列字段(维度或衡量标准)及其与底层表或派生表的关联。在 LookML 中,视图通常引用底层数据库表,但也可以表示派生表。

一个数据视图可能会与其他数据视图合并。视图之间的关系通常作为模型文件中的“探索”声明的一部分进行描述。

在 Looker 中,数据视图名称显示在维度的开头,用于衡量数据表中的名称。此命名惯例明确指出字段属于哪个视图:

视图存储在 .view.lkml 文件中。接下来是视图声明的常规形式。如需了解完整的使用详情,请参阅查看参数文档页面。

view: view_name {
  dimension: field_name {
    # dimension_parameters
  }
  # more dimension declarations
  measure: field_name {
    # measure_parameters
  }
  # more measure declarations
  set: first_set {
    fields: [field_one, field_two]
  }
}

当您在探索中使用 type: count测量值时,可视化图表会用视图名称(而非单词“Count”)标记结果值。为避免混淆,我们建议将视图名称复数,在可视化设置中选择系列下的显示完整字段名称,或使用 view_label 及视图名称的复数形式。

探索

“探索”是用户可以查询的视图。您可以将“探索”看作查询的起点,也可以用 SQL 术语看作 SQL 语句中的 FROM。并非所有视图都是“探索”,因为并非所有视图都描述了感兴趣的实体。例如,与州/省名查询对照表对应的 States 视图并不保证是“探索”,因为企业用户从来不需要直接查询它。另一方面,商家用户可能想要通过某种方式查询“订单”数据视图,因此为“订单”定义“探索”十分合理。

explore 声明可指定与其他视图的联接关系。继续前面的示例,Orders 视图可能会加入 States 视图,从而标识销售发生的州。如需了解详情,请参阅联接

在 Looker 中,用户可以看到探索菜单中列出的探索:

按照惯例,“探索”功能在模型文件中进行声明。以下示例演示了针对电子商务数据库的 orders 探索的声明。视图 orderscustomers 分别在各自的视图文件中定义。

# ———————————————
# file: ecommercestore.model.lookml
# ———————————————
connection: order_database
include: "filename_pattern"   # include all the views
explore: orders {
  join: customers {
    sql_on: ${orders.customer_id} = ${customers.id} ;;
  }
}

如需详细了解 join 声明,请参阅联接。如需了解完整的使用详情,请参阅联接参数文档页面。

维度和衡量字段

视图包含的字段(主要是维度和度量)是 Looker 查询的基本构建块。

在 Looker 中,维度是一个可分组字段,可用于过滤查询结果。但可以是:

  • 一个与底层表中的列有直接关联的属性
  • 事实或数值
  • 派生的值,根据单行中的其他字段的值计算得出

例如,“产品”数据视图的维度可能包括产品名称、产品型号、产品颜色、产品价格、产品创建日期和产品服务终止日期。

衡量标准是使用 SQL 聚合函数的字段,例如 COUNTSUMAVGMINMAX。根据其他测量值的值计算的任何字段也属于测量。衡量标准可用于过滤分组的值。例如,“销售”数据视图的衡量指标可能包括售出商品总数(计数)、总销售价格(总和)和平均销售价格(平均值)。

字段的行为和预期值取决于其声明的类型,例如 stringnumbertime。对于测量值,类型包括聚合函数,例如 sumpercent_of_previous。有关详情,请参阅维度类型衡量类型

在 Looker 中,字段会列在页面左侧字段选择器中的探索页面上。

按照惯例,字段会声明为字段所属的视图的一部分,并存储在视图文件中。以下示例展示了几个维度和衡量声明。请注意,在不使用完全限定范围的 SQL 列名称的情况下,使用替代运算符 ($) 来引用字段。

以下是一些维度和指标的声明示例:

view: orders {
  dimension: id {
    primary_key: yes
    type: number
    sql: ${TABLE}.id ;;
  }
  dimension: customer_id {
    sql: ${TABLE}.customer_id ;;
  }
  dimension: amount {
    type: number
    value_format: "0.00"
    sql: ${TABLE}.amount ;;
  }
  dimension_group: created {
    type: time
    timeframes: [date, week]
    sql: ${TABLE}.created_at ;;
  }
  measure: count {
    type: count           # creates sql COUNT(orders.id)
    sql: ${id} ;;
  }
  measure: total_amount {
    type: sum             # creates sql SUM(orders.amount)
    sql: ${amount} ;;
  }
}

此外,您还可以定义一个 dimension_group(可同时创建多个与时间相关的维度)和 filter 字段(其中包含各种高级用例,例如模板化过滤器)。

有关声明字段以及可应用于这些字段的各种设置的完整详情,请参阅字段参数文档页面。

联接数

作为 explore 声明的一部分,每个 join 声明都指定了可以加入 explore 的视图。当用户创建包含来自多个视图的字段的查询时,Looker 会自动生成 SQL 联接逻辑以正确引入所有字段。

以下是 explore 声明中的 join 示例:

# ———————————————
# file: ecommercestore.model.lookml
# ———————————————
connection: order_database
include: "filename_pattern"   # include all the views
explore: orders {
  join: customers {
    sql_on: ${orders.customer_id} = ${customers.id} ;;
  }
}

如需了解详情,请参阅在 LookML 中使用联接

项目清单文件

您的项目可能包含项目清单文件,此类清单文件可用于项目级设置,例如用于指定导入到当前项目的其他项目设置、定义 LookML 常量、指定模型本地化设置,以及向项目添加扩展程序自定义可视化图表

每个项目只能有一个清单文件。该文件必须命名为 manifest.lkml 并位于 Git 代码库的根级目录下。在 IDE 中使用文件夹时,请确保 manifest.lkml 文件保存在项目的根目录中。

您可以将项目清单文件用于项目导入或本地化,但不能同时用于这两个函数。

如需导入其他项目的 LookML 文件,请使用项目清单文件指定当前项目的名称以及任何可本地或远程存储的外部项目的位置。例如:

# This project
project_name: "my_project"

# The project to import
local_dependency: {
  project: "my_other_project"
}

remote_dependency: ga_360_block {
  url: "https://github.com/llooker/google_ga360"
  ref: "4be130a28f3776c2bf67a9acc637e65c11231bcc"
}

在项目清单文件中定义外部项目后,您可以使用模型文件中的 include 参数将这些外部项目中的文件添加到当前项目中。例如:

include: "//my_other_project/imported_view.view"
include: "//ga_360_block/*.view"

如需了解详情,请参阅从其他项目导入文件文档页面。

如需向模型添加本地化设置,请使用项目清单文件指定默认本地化设置。例如:

localization_settings: {
  default_locale: en
  localization_level: permissive
}

指定默认本地化设置是模型本地化的一个步骤。如需了解详情,请参阅本地化 LookML 模型文档页面。

集合

在 Looker 中,是一个列表,用于定义一组一起使用的字段。通常情况下,使用集合来指定在用户深入研究数据后要显示的字段。钻机组是按字段指定的,因此您可以完全控制当用户点击表格或信息中心中的某个值时显示的数据。集还可用作安全功能,以定义对特定用户可见的字段组。

以下示例在视图 order_items 中显示了一个 set 声明,用于定义列出所购商品相关详细信息的字段。请注意,该集合通过指定范围来引用其他视图中的字段。

set: order_items_stats_set {
  fields: [
    id,  # scope defaults to order_items view
    orders.created_date,  # scope is "orders" view
    orders.id,
    users.name,
    users.history,  # show all products this user has purchased
    products.item_name,
    products.brand,
    products.category,
    total_sale_price
  ]
}

如需了解各组的完整用法详情,请参阅 set 参数文档页面。

展开细目

在 Looker 中,您可以深入了解在编写 LookML 时以这种方式设置的任何字段。同时在查询结果表和信息中心内运行数据透视功能。深入分析会启动一项受您点击的值限制的新查询。

钻床的行为在维度和测量结果方面有所不同:

  • 对某个维度展开细目时,新查询会过滤所深入分析的值。例如,如果您在按日期查看客户订单的查询中点击特定日期,则新查询将仅显示特定日期的订单。
  • 深入分析某个测量结果时,新查询会显示做出相应测量结果的数据集。例如,在详细统计某个计数时,新查询将显示用于计算该计数的行。在深入分析最高、最低和平均测量结果时,展开细目仍会显示促成该测量结果的所有行。例如,这意味着,如果详细衡量某个最大值,则系统会显示用于计算最大值的所有行,而不只是一行显示最大值。

为新的展开查询显示的字段可以由 set 定义,也可以由 drill_fields 参数(针对字段)drill_fields 参数(针对视图)定义。

派生表

派生表是一种查询,其结果就像是数据库中的实际表一样使用。派生表是使用 view 声明中的 derived_table 参数创建的。Looker 访问派生表,就像它们是物理表以及自己的一组列一样。派生表通过 derived_table 参数作为自己的视图公开,其定义方式与传统视图相同。与任何其他视图一样,您可以查询派生表格的视图并将其联接到其他视图中。

派生表还可定义为永久性派生表 (PDT),这些派生表会写入数据库的临时架构,并根据您使用持久性策略指定的时间表自动生成。

如需了解详情,请参阅 Looker 中的派生表文档页面。

数据库连接

LookML 项目的另一个重要元素是 Looker 将用于对数据库运行查询的数据库连接。Looker 管理员使用“连接”页面来配置数据库连接,而 LookML 开发者使用模型文件中的 connection 参数指定用于模型的连接。如果您从数据库生成 LookML 项目,Looker 将自动填充模型文件中的 connection 参数。