最佳实践:编写可持续、可维护的 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(适用于观看)extends(适用于探索) 参数文档页面以及使用扩展程序定义联接社区帖子中查看其他示例。

避免在多个位置重复代码,以便在各个探索中保持一致性。如需详细了解如何实现此操作,请参阅 Looker 社区中有关避免探索结果之间出现不一致的帖子。

整合地图图层和值格式等项

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

例如,假设您有一个地图图层文件 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"
}

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

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

创建开发指南

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

  • 明确整理 LookML 文件,使其保持一致且易于浏览
  • 在整个视图和模型中使用注释,为编写的 LookML 添加上下文
  • 使用 Markdown 文件在 Looker 中创建文档