用量
层次结构
test - 或 - test - 或 - test |
默认值
无接受
数据测试的标识符,以及定义测试断言和查询的子参数。
|
定义
有关数据测试的更多提示和信息,请参阅 LookML 数据测试:建议和最佳做法主题。
Looker 具有 LookML 验证程序来验证您的 LookML 代码在语法上有效,而 Content Validator 用于验证您的内容和模型之间的对象引用。
除了这些验证程序之外,test
参数还可让您验证模型的逻辑。对于每个数据测试,您都需要创建查询和 yesno
断言语句。数据测试会运行测试查询,并验证测试查询的断言是否成立。如果断言语句对测试查询的每一行返回 yes
,则数据测试会通过。
如果您的项目设置配置为在部署到生产环境之前需要通过数据测试,IDE 会在您提交对项目的更改后显示运行测试按钮。LookML 开发者必须先运行数据测试,然后才能将更改部署到生产环境。
无论您的项目在部署到生产环境之前是否需要数据测试,处于开发模式的 LookML 开发者都可以随时运行数据测试以验证模型的逻辑。
您可以在模型文件、查看文件或单独的专用数据测试文件中创建数据测试。使用专用文件保存数据测试时,请务必对要运行数据测试的任何模型文件或视图文件 include
执行数据测试文件。
数据测试不能与同一项目中的另一个数据测试同名。
explore_source
如果您在项目中为多个数据测试使用相同的explore_source
,请确保数据测试的名称都是唯一的。
test
参数具有以下子参数:
explore_source
:定义要在数据测试中使用的查询。assert
:定义针对测试查询的每一行运行的 Looker 表达式,以验证数据。
为测试定义 LookML 后,您可以运行数据测试来验证测试能否正常运行,并查看模型的逻辑是否通过了测试(您必须处于开发模式才能运行数据测试)。
您可以通过多种方式为项目启动数据测试:
- 如果您的项目设置配置为在将文件部署到生产环境之前通过数据测试,则 IDE 会在您向项目提交更改后显示运行测试按钮。这会运行项目的所有测试,无论哪个文件定义测试。您必须先通过数据测试,然后才能将更改部署到生产环境中。
- 点击 Project Health 面板中的 Run Data Tests 按钮。这会运行您项目中的所有数据测试,无论哪个文件定义了该测试。
- 从文件菜单中选择 Run LookML Tests 选项。这将仅运行当前文件中定义的测试。
运行数据测试后,Project Health 面板会向您显示进度和结果:
您可以点击探索查询链接,以打开包含数据测试中定义的查询的“探索”。
explore_source
数据测试中的 explore_source
参数使用的语法和逻辑与派生表的 explore_source
参数相同。一个区别是数据测试的 explore_source
不支持 derived_column
、bind_filters
和 bind_all_filters
子参数。
Handy Tip:若要轻松获取
explore_source
LookML,您可以使用现有“探索”功能来创建查询,然后从“探索”齿轮菜单中选择获取 LookML,然后点击派生表标签页,即可获取查询的 LookML。如需了解详情,请参阅有关创建原生派生表的文档。
对于数据测试的 explore_source
,请注意以下事项:
数据测试的
explore_source
查询是标准的 Looker 查询,这意味着测试的explore_source
查询最多只能包含 5000 行。请确保您的查询不超过 5000 行,以便您能够获得完整的结果集进行测试。您可以在explore_source
中添加过滤条件或排序功能,以减少查询中的行数,或使相关行显示在查询顶部。带有
extension: required
的explore
不能用作数据测试的explore_source
。LookML 验证器将生成找不到explore_source
的错误。
assert
assert
子参数定义了将 explore_source
查询结果视为有效条件。expression
子参数接受生成 yesno
(布尔值)的 Looker 表达式。运行 explore_source
查询后,系统会对查询结果的每一行计算断言表达式。如果查询的任何行存在 no
响应,则数据测试将失败。如果查询本身出现错误,测试也会失败。
一个测试可以有多个 assert
声明。如需通过测试,每个 explore_source
查询的断言都必须为 true。
Handy 提示:您可以使用表计算对话框测试要在测试的
expression
参数中使用的 Looker 表达式语法。
在数据测试中使用时,Looker 表达式中的字段必须完全限定,也就是说,这些字段是使用 view_name.field_name
格式指定的。例如,以下表达式将字段声明为 aircraft_engine_types.aircraft_engine_type_id
:
assert: engine_type_id_not_null {
expression: NOT is_null(${aircraft_engine_types.aircraft_engine_type_id}) ;;
}
示例
确保主键具有唯一性
以下数据测试从 orders
探索创建查询并定义了 expression
,以测试结果集中的订单 ID 是否具有唯一性。explore_source
查询会创建与数据库中的每个 ID 关联的行计数。如果 ID 具有唯一性,则数据库的 ID 应该只有一行。此外,它对计数进行排序并将结果集限制为一行,因此查询响应将是计数最高的 ID。如果任何 ID 的数量大于 1,就说明该 ID 存在多行,因此该 ID 不是唯一的。如果是这种情况,此数据测试将失败。
test: order_id_is_unique {
explore_source: orders {
column: id {}
column: count {}
sorts: [orders.count: desc]
limit: 1
}
assert: order_id_is_unique {
expression: ${orders.count} = 1 ;;
}
验证已知值
接下来的这项数据测试旨在确保 2017 年的收入金额始终为 626000 美元。在这个数据集中,这是一个永远不会改变的已知值。
test: historic_revenue_is_accurate {
explore_source: orders {
column: total_revenue {
field: orders.total_revenue
}
filters: [orders.created_date: "2017"]
}
assert: revenue_is_expected_value {
expression: ${orders.total_revenue} = 626000 ;;
}
}
确认没有 null 值
接下来的这个数据测试旨在确保数据中没有 null 值。此 explore_source
使用 sort
以确保在查询顶部返回任何 null。null 值排序方式可能因方言而异。以下测试以 desc: yes
为例。
test: status_is_not_null {
explore_source: orders {
column: status {}
sorts: [orders.status: desc]
limit: 1
}
assert: status_is_not_null {
expression: NOT is_null(${orders.status}) ;;
}
}