使用 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
我正在尝试使用 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