我的第一个dbt问题之一,因为我也是新的框架。
我有以下的查询,并有一个问题,什么是最好的方法写得更好?
我使用var('partner')和uuid用于status列,还使用临时表名'points_{{partner}}'
问题:
'points_{{partner}}',但最终我希望在目的地中存储许多特定于合作伙伴的视图。partner放在schema.yml或其他dbt文件中,这样我就可以加载和引用它了吗?有关于如何做到这一点的例子吗?以这种方式,我考虑的是不需要使用多个if-else语句来处理20+合作伙伴,而只是简单地使用20+WITH 'points_{{partner}}' AS (
SELECT
TO_CHAR(
TO_DATE(points_timestamp, 'YYYY-MM-DD'),
'YYYY-MM'
) AS "months",
SUM(points_amount) AS "points_amount",
CASE
{% if var('partner') == 'nike' %}
WHEN uuid = '00000000-d64b-46ea-8454-428279b15064' THEN 'OK'
WHEN uuid = '11111111-dc9a-493a-b1c0-6a798a4889ac' THEN 'NOT_OK'
{% elif var('partner') == 'puma' %}
WHEN uuid = '22222222-9644-4c6f-bcb6-57ae8401dfc0' THEN 'OK'
WHEN uuid = '33333333-af79-4364-8b26-c8106627c937' THEN 'NOT_OK'
{% endif %}
END AS "status"
FROM
dbt.raw_points
WHERE
{% if var('partner') == 'nike' %}
partner_uuid = '88888888-cfd3-47f4-b6da-447401aefbae'
{% elif var('partner') == 'puma' %}
partner_uuid = '99999999-f345-43e8-a335-a1268969095e'
{% endif %}
GROUP BY
months,
points_amount,
status
ORDER BY
months DESC
)
SELECT * FROM 'points_{{partner}}'发布于 2021-07-06 23:39:16
现在,您正在执行一个cte,将所有合作伙伴模板到该单个对象中。另一种选择是一个模板cte,将每个合作伙伴结合在一起。
(本例假设在每个合作伙伴的唯一模式中包含每个raw_points表--仓库的一个软的单一租赁模型)
示例:
{% set partners = get_column_values(table=ref('my_distinct_partners'),
column='partner_name', max_records=50, filter_column='partner_status', filter_value='OK') %}
{% if partners != '' %}
with partner_group_points as (
{% for partner in partners %}
SELECT
TO_CHAR( TO_DATE(points_timestamp, 'YYYY-MM-DD'), 'YYYY-MM') AS "months",
'{{partner}}' as partner,
SUM(points_amount) AS "points_amount",
<custom calculation for status here> as status
FROM
`{{ target.project }}.platform_data_{{partner}}.raw_points`
GROUP BY
months,
points_amount,
status
ORDER BY months DESC
{% if not loop.last %} UNION ALL {% endif %}
{% endfor %}
)
SELECT
months,
partner,
sum(points_amount) as points_amount,
status
FROM partner_group_points
GROUP BY months,partner,status
{% endif %}我完全是捏造的,因为我不知道你的确切来源数据,但你可能得到了要点。
https://stackoverflow.com/questions/68040061
复制相似问题