【发布时间】:2021-09-03 11:31:59
【问题描述】:
我的第一个dbt 问题之一,因为我也是这个框架的新手。
我有以下查询,并且有一个问题,最好的方法是什么?
我使用var('partner') 和uuid 用于status 列,以及临时表名称'points_{{partner}}'
问题:
-
为了处理上述 20 多个合作伙伴而不是在 20 个 SQL 文件上重复相同的查询,最好的方法是什么?我在这里使用
'points_{{partner}}',但最终我希望将许多这些合作伙伴特定的视图存储在目标中。 -
我可以将
partner放在schema.yml或其他dbt 文件中,以便我可以加载和引用它吗?有关如何执行此操作的任何示例?这样一来,我在考虑不需要有多个if-else语句与 20 多个合作伙伴来处理,而只是简单的{{partner}}
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}}'
【问题讨论】:
标签: sql amazon-redshift dbt