使用 DBT 在 bigquery 中更新 table

Updating a table in bigquery using DBT

我正在尝试使用 DBT 在 bigquery 中更新 table。以下命令在 bigquery 中执行;

Update {{ ref('my_table') }}
SET variable = 'value'
WHERE lower(variable) LIKE '%XX%' or lower(variable) like '%YY%'

但是当我在 DBT 中 运行 它时,我得到以下错误

Server error: Database Error in rpc request (from remote system)
Syntax error: Expected end of input but got keyword LIMIT at [4:1]

有谁知道为什么会这样以及如何解决?

一开始我知道这有点不直观,但是有了 dbt,every model is a select statement

你应该考虑做类似的事情:

with cte as (
     select * from {{ ref('my_table') }}
     where <criteria>
)
 select col1,
        col2,
        'value' as col3
 from cte

或者可能更简单:

SELECT 
  'value' as variable
FROM {{ ref('my_table') }}
WHERE lower(variable) LIKE '%XX%' or lower(variable) like '%YY%'

仅仅是因为在dbt run周期中,新的价值将具体化到新模型中。

但是,如果您正在寻找以 DRY 方式清理基础表的方法,我强烈推荐此线程 Modeling SQL Update Statements 来自 dbt 讨论的一些关于处理特定值清理的管理语句的模式。来自 Kyle Ries 的示例:

{% set mappings = {'something': 'boo', 'something-else': 'boo-else'} %}

with source as (
        select * from {{ ref(‘stg_foobar’) }}
),

final as ( 

        select
            case
              {% for old, new in mappings %}
                when other_column like ‘{{old}}’ then ‘{{new}}’
              {% endfor %}
            end as column_name
        from
            source

)

select * from final