You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DBT自定义记录数测试编译错误:macro不接受'model'参数

错误原因解析

编译错误的核心是:DBT执行model级自定义测试时,会自动向测试宏传递model参数,但你的宏定义未声明接收该参数,导致参数不匹配;同时宏内部引用了未定义的model变量,进一步引发问题。


修复步骤

1. 修改自定义测试宏(test_record_count.sql)

调整宏参数列表,添加DBT自动传递的model参数,同时修正测试逻辑使其符合DBT测试规范:

{% test record_count(model, source_name, source_table) %}

WITH
  source_count AS (
    SELECT COUNT(*) AS record_count FROM {{ source(source_name, source_table) }}
  ),
  model_count AS (
    SELECT COUNT(*) AS record_count FROM {{ model }}
  )

-- 记录数不匹配时返回错误信息,触发测试失败;匹配时无结果,测试通过
SELECT
  '记录数不匹配:源表有 ' || s.record_count || ' 行,模型表有 ' || m.record_count || ' 行' AS error_message
FROM source_count s
CROSS JOIN model_count m
WHERE s.record_count != m.record_count

{% endtest %}

2. 更新Schema配置(schema.yml)

由于测试直接绑定在目标model上,无需手动传递model_name参数,简化配置:

- name: prontoform_prod_lptr_grower
  description: 'Mapping ids to question labels'
  data_tests:
    - record_count:
        source_name: "LPTR_GROWER_RAW_SUBMISSIONS"
        source_table: "RAW_SUBMISSIONS"

  columns:
    - name: submission_id
      description: 'submission_id of form'
      data_tests:
        - not_null
        - unique
    - name: question_id
      description: 'Unique question ID used for mapping'
      data_tests:
        - not_null          
    - name: question_label
      description: 'The label of the question'
      data_tests:
        - not_null

3. 验证修复

重新执行测试命令:

dbt test --select prontoform_prod_lptr_grower

关键说明

  • DBT的model级自定义测试默认会注入model参数,代表当前测试绑定的模型,无需手动传递。
  • 测试逻辑调整为记录数不匹配时返回结果:DBT测试规则是返回0行则通过,返回任意行数则失败,该逻辑更贴合官方规范。
  • 移除了冗余的model_name参数,避免变量混淆。

内容的提问来源于stack exchange,提问作者Pardeep Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 08:55:55