自 Looker 22.6 起,新的 LookML 运行时已推出。“运行时”是 Looker 中用于解读 LookML 代码的部分。与旧版运行时相比,新运行时速度更快,并且可以检查更多 LookML 错误。
Looker 强烈建议所有客户迁移到新运行时。新的 LookML 运行时能够捕获之前被忽略的错误,因此启用新运行时可能会导致出现新的 LookML 错误。这些错误并非由新运行时引起,而是之前就存在的错误,现在才被发现。
此外,想要将实例更改为 Looker (Google Cloud Core) 的客户必须先迁移到新运行时。
如何切换到新运行时
1. 关闭“使用旧版 LookML 运行时”旧版功能(如果可用)
部分 Looker 启用了“使用旧版 LookML 运行时”旧版功能。停用使用旧版 LookML 运行时 旧版功能,以便将 Looker 实例迁移到新运行时。
如果 Looker 实例的旧版功能 管理页面中没有使用旧版 LookML 运行时 旧版功能,则表示您的实例已在使用新运行时。
2. 确保 LookML 项目未配置 new_lookml_runtime:no
您可以在 LookML 项目的 清单文件中添加 new_lookml_runtime:no 语句,以替换 Looker 实例的全局 使用旧版 LookML 运行时 设置。
确保 LookML 项目清单文件没有 new_lookml_runtime 参数,或者确保所有 LookML 项目都将 new_lookml_runtime 设置为 yes。
新运行时可能会发现的 LookML 问题
迁移到新运行时后,您可能会注意到 LookML 中出现新错误。这些新错误并非由新运行时引起,而是之前就存在的问题,现在才被发现。
根据 LookML 开发者设置,您可能需要先修复这些错误,然后才能继续提交 LookML 更改。以下部分介绍了一些问题,新 LookML 运行时可能会在您的项目中发现这些问题,并介绍了如何解决这些问题:
- 部分永久性派生表可能会重建
- Liquid 表达式中的 HTML 字面量可能会转换为 Unicode
sql_distinct_key中的无效引用会导致“unknown view”- 没有主键的 Distinct 类型度量会生成不同的 SQL
- 在 Liquid 中使用裸字段引用访问
_filters[]会将引用的字段添加为选定列
部分永久性派生表可能会重建
永久性派生表 (PDT) 键基于 LookML 运行时生成的 SQL。在某些情况下,新运行时可能会为 PDT 生成不同的(但等效的)SQL,从而导致 PDT 键不同。PDT 键的更改会导致 PDT 重建。
Liquid 表达式中的 HTML 字面量可能会转换为 Unicode
Liquid 表达式中的 HTML 标记可能会被新运行时转换为其 Unicode 等效项。例如,<strong> 标记可能会转换为 <strong>。在旧版运行时中,可以直接比较 HTML 标记,如以下示例所示:
html:
{{ value |replace("<strong>"), "[" |replace("</strong>"), "]" }} ;;
在新运行时中,需要针对 Unicode 进行比较:
html:
{{ value |replace("<strong>"), "[" |replace("</strong>"), "]" }} ;;
sql_distinct_key 中的无效引用会导致“unknown view”
使用新运行时时,引用未知字段或视图的 sql_distinct_key 会抛出异常。例如:
measure: total_shipping {
type: sum_distinct
sql: ${order_shipping} ;;
sql_distinct_key: ${some_incorrect_field_name} ;;
}
没有主键的“Distinct”类型度量会生成不同的 SQL
没有 primary-key 或 sql_distinct_key 参数的 Distinct 类型度量(average_distinct、median_distinct、percentile_distinct、sum_distinct)可能会在新运行时中生成不同的 SQL。
构建 Distinct 类型度量时,请务必指定 primary-key 或 sql_distinct_key。
在 Liquid 中使用裸字段引用访问 _filters[] 会将引用的字段添加为选定列
在 Looker 中,“裸字段引用”是指未用大括号括起来的引用,例如 users.created_date 而不是 ${users.created_date}。
旧版运行时在使用 _filters Liquid 变量时会忽略裸字段引用。新运行时会将该字段添加到 SQL 查询的 SELECT 子句中。
例如,在此维度中,users.created_date 是裸引用:
dimension: name {
html:
{% if _filters[users.created_date] != NULL %}
{{rendered_value}} (created: {{_filters[users.created_date]}})
{% else %}
{{rendered_value}}
{% endif %}
;;
}
在旧版运行时中,_filters[users.created_date] 始终会被忽略,并且只会满足 {% if %} 的第二个条件。在新运行时中,users.created_date 会添加到 SQL 查询的 SELECT 子句中,以便可以评估该条件。
自动将意外字段添加到 Looker 查询可能会让用户感到困惑,因此最佳做法是 不要 使用裸字段引用,而是在 Liquid 中使用 _filters[] 时,在字段名称周围使用单引号。例如,'users.created_date'。