最佳实践:编写可持续、可维护的 LookML

这些最佳实践反映了由经验丰富的 Looker 跨职能团队分享的建议。这些见解源自我们与 Looker 客户合作的多年经验,从实施到长期成功,这些经验总结得出。这些做法适用于大多数用户和情况;但是,与往常一样,在实施本页中的任何建议时,请自行做出最合理的判断。

本页提供了有关编写可持续、可维护的 LookML 的建议。以下各部分更详细地介绍了这些建议:

使用替换运算符

应在所有 LookML 文件中使用替换运算符。LookML 模型应只有一个指向物理数据模型中任何对象的引用点。任何后续定义需要引用该对象时,都应通过指向已定义的 LookML 对象来实现。

对于直接从底层数据库列拉取数据的所有基本维度,在引用底层数据库表时使用 ${TABLE}.field_name 语法。如果架构或表名称发生更改,开发者便可以在一个位置(在 sql_table_name 参数内)更新架构或表名称,并使其传播到其余代码。

引用已在 LookML 中定义的维度或测量时,请使用语法 ${field_name}。如果列名称发生更改,只需在基本维度或测量的 sql 参数中更新相应更改即可。然后,此更改将自动传播到引用该列的所有其他字段。例如,如果数据库中的列名称从 usersid 更改为 users_id,您需要在 Looker 中更改引用。使用 ${field_name} 表示您只需更新一行。

当多个维度和测量通过 ${TABLE}.field_name 引用现有 LookML 字段时,需要进行多项更改。例如,请考虑以下示例 LookML 代码中的 this_week_countthis_month_count 测量:

dimension: usersid {
  type: number
  sql: ${TABLE}.usersid ;; # Change here
}

measure: this_week_count {
  type: count_distinct
  sql: ${TABLE}.usersid ;; # Change here
  filters: [created_date: "7 days"]
}

measure: this_month_count {
  type: count_distinct
  sql: ${TABLE}.usersid ;; # Change here
  filters: [created_date: "1 month"]
}

由于 this_week_countthis_month_count 均使用 sql 参数中的 ${TABLE}.usersid 语法,因此需要更新所有三个字段的 sql 参数。

使用引用 ${field_name} 时,只需进行一项更改:

dimension: usersid {
  type: number
  sql: ${TABLE}.usersid ;; # Change here
}

measure: this_week_count {
  type: count_distinct
  sql: ${usersid} ;;       #Using ${field_name} to reference the LookML field `usersid`
  filters: [created_date: "7 days"]
}

measure: this_month_count {
  type: count_distinct
  sql: ${usersid} ;;       #Using ${field_name} to reference the LookML field `usersid`
  filters: [created_date: "1 month"]
}

如需了解替代运算符的更多用法,请参阅我们的整合 SQL 并引用 LookML 对象文档页面。

定义字段集

使用集来维护模型中可重复使用的字段列表。任何重复的字段列表(无论是使用 fields 参数还是在深入分析字段中使用)都应合并到集中,以便在模型中创建一个位置来更新该字段列表或更改字段引用。如需详细了解集,请参阅 set 参数的文档页面。

避免重复使用代码

您可以将 LookML 对象视为构建块,并使用 extends 参数以不同方式将对象组合在一起,而无需重复编写代码。如需查看有关重复使用代码的详细信息和示例,请参阅通过扩展重复使用代码文档页面。如需查看其他示例,请参阅 extends(用于视图)extends(用于探索)参数文档页面,以及使用扩展程序定义联接社区帖子。

不要在多个位置重复编写代码,以保持各项探索的一致性。如需了解如何实现此目标,请参阅介绍避免探索间不一致的 Looker 社区帖子。

整合地图图层和值格式等内容

在名为 map_layers.lkml 的 LookML 文件中集中定义自定义地图图层,您可以按照 Looker 的项目文件文档创建该文件。然后,您可以根据需要在模型中添加此文件。或者,您也可以将 JSON 文件直接添加到代码库,方法是将数据文件拖放到 LookML 项目中,然后在模型中引用这些文件。

例如,假设您有一个地图图层文件 map_layers.base.lkml,其中包含以下 LookML 代码:

map_layer: example_africa {
  file: "africa_file_name.json"
  property_key: "geounit"
}

map_layer: example_asia {
  file: "asia_file_name.json"
  property_key: "geounit"
}

map_layer: example_europe {
  file: "europe_file_name.json"
  property_key: "geounit"
}

您可以在项目的任何模型中添加地图图层文件 map_layers.base.lkml,只需向所需的模型文件添加 LookML 代码 include: "map_layers.base.lkml" 即可。

在模型内集中设置任何自定义值格式。使用 named_value_format 参数在模型中设置任何自定义格式,然后在维度和测量中使用 value_format_name 参数来引用这些格式。

制定开发准则

定义开发准则,以便更轻松地开发和扩缩 LookML 模型。如需查看示例开发指南列表的演示,请参阅有关 LookML 开发示例的 Looker 社区帖子。通用指南包括对以下方面的要求:

  • 清晰地整理 LookML 文件,使其保持一致且易于导航
  • 在整个视图和模型中使用注释,向编写的 LookML 添加上下文
  • 使用 Markdown 文件在 Looker 中创建文档