关于 lookml-tests
lookml-tests 是用于编写 LookML 测试的开发技能,面向维护语义模型和数据质量的团队。它覆盖主键完整性、指标准确性与业务逻辑验证,并提供组织和性能建议。
主要功能
- 01按 Explore 组织测试文件
- 02使用查询与断言构建测试
- 03检查主键唯一性
- 04验证指标值与业务规则
- 05通过筛选控制扫描范围
适用场景
- 01发现关联导致的主键重复
- 02核对收入等指标是否符合预期
- 03检查计算关系和空值约束
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ looker-open-source/ looker-skills --skill lookml-tests安装后在 Claude Code 中输入/lookml-tests确认已加载。
详细介绍
LookML 测试规范
测试对于维护数据可信度至关重要。LookML 测试可让我们验证语义模型是否按预期运行,以及底层数据是否符合我们的假设。
1. 文件组织
- 位置:在
tests/[explore_name].test.lkml中定义测试。 - 每个 Explore 一个测试套件:每个文件应包含特定 Explore 的所有测试定义。
- 命名约定:
[explore_name].test.lkml(例如,orders.test.lkml)。
2. 测试结构
每项测试都由一个 explore_source 查询和一条 assert 语句组成。
test: [test_name] {
explore_source: [explore_name] {
column: [column_name] { field: [view_name].[field_name] }
filters: {
field: [view_name].[field_name]
value: "[value]"
}
}
assert: [assertion_name] {
expression: ${[view_name].[field_name]} [operator] [value] ;;
}
}
3. 测试类型
A. 完整性检查(关键)
验证联接后主键是否保持唯一。这是防范由不正确的 one_to_many 联接定义导致的“扇出”错误的最佳方法。
示例:主键唯一性
test: orders_pk_is_unique {
explore_source: orders {
column: order_id {}
column: count {}
# Limit to recent data to save costs/time if table is large
filters: {
field: orders.created_date
value: "last 7 days"
}
}
assert: order_id_is_unique {
expression: ${orders.count} = 1 ;;
}
}
B. 准确性测试
根据已知常量或预期值验证特定度量值。
示例:收入为正
test: revenue_is_positive {
explore_source: orders {
column: total_revenue {}
filters: {
field: orders.created_date
value: "yesterday"
}
}
assert: revenue_greater_than_zero {
expression: ${orders.total_revenue} >= 0 ;;
}
}
C. 业务逻辑验证
确保计算结果符合预期。例如,检查 gross_margin 是否始终不大于 revenue,或者活跃用户的 lifetime_orders 是否始终不为 NULL。
示例:逻辑检查
test: margin_less_than_revenue {
explore_source: orders {
column: total_revenue {}
column: total_margin {}
}
assert: margin_is_valid {
expression: ${orders.total_margin} <= ${orders.total_revenue} ;;
}
}
4. 最佳实践
- 描述性扩展名:为测试(
orders_pk_is_unique)和断言(order_id_is_unique)使用清晰易懂的名称。 - 性能:对于大型表,使用筛选条件(例如,
last 7 days)限制扫描范围,除非需要验证完整历史数据。 - 模型包含:确保模型文件包含
test文件(例如,include: "/tests/*.test.lkml")。
评论
支持 Markdown