DBT 重复检查忽略模式
DBT Duplication Check Ignores Schemas
在 dbt compile
期间,会进行模型重复检查,以确保模型不会相互重叠。这项检查给我带来了问题。
我们的架构
我们的系统将处理阶段划分为不同的模式,我们希望开始使用 dbt。所以,假设我们正在导入一个我们称之为 jaffles
的原始数据集,我们将有一个 raw.jaffles
table、一个 clean.jaffles
table,等等在。请注意,此示例中的 raw
和 clean
是不同的架构。
问题
这打破了重复检查。不管我如何 customize the schema names, or how I call ref,重复检查发生在接触任何一个之前,注意到我们有两个名为“jaffles”的模型,忽略了它们实际上不会因处于不同模式而发生冲突,并抛出错误。
可能的解决方案
- 理想情况下,我会自定义它如何解决用于检查重复以包含架构的路径。但是我找不到如何自定义那个部分。
- 也许我可以完全跳过此检查并自己进行完整性检查。但是我找不到禁用它的选项。
- 我看到的唯一可行的解决方案是将每个视图重命名为唯一的,这将是很多工作,会污染我们已经建立的非常干净的命名约定。
如 docs 中所述,“模型名称必须是唯一的,即使它们位于不同的文件夹中也是如此”。
不过,您可以使用 custom aliases
(参见 the docs),您可以在其中 re-use 相同的 table/view 名称,但不超过 2 个不同的名称模式。在您的示例中,您可以有两个不同的模型,每个模型都分配了一个特定的模式:
-- models/.../raw_jaffles.sql
{{ config(alias='jaffles', schema='raw') }}
-- models/.../clean_jaffles.sql
{{ config(alias='jaffles', schema='clean') }}
尽管如此,文件名仍然需要彼此不同。
在 dbt compile
期间,会进行模型重复检查,以确保模型不会相互重叠。这项检查给我带来了问题。
我们的架构
我们的系统将处理阶段划分为不同的模式,我们希望开始使用 dbt。所以,假设我们正在导入一个我们称之为 jaffles
的原始数据集,我们将有一个 raw.jaffles
table、一个 clean.jaffles
table,等等在。请注意,此示例中的 raw
和 clean
是不同的架构。
问题
这打破了重复检查。不管我如何 customize the schema names, or how I call ref,重复检查发生在接触任何一个之前,注意到我们有两个名为“jaffles”的模型,忽略了它们实际上不会因处于不同模式而发生冲突,并抛出错误。
可能的解决方案
- 理想情况下,我会自定义它如何解决用于检查重复以包含架构的路径。但是我找不到如何自定义那个部分。
- 也许我可以完全跳过此检查并自己进行完整性检查。但是我找不到禁用它的选项。
- 我看到的唯一可行的解决方案是将每个视图重命名为唯一的,这将是很多工作,会污染我们已经建立的非常干净的命名约定。
如 docs 中所述,“模型名称必须是唯一的,即使它们位于不同的文件夹中也是如此”。
不过,您可以使用 custom aliases
(参见 the docs),您可以在其中 re-use 相同的 table/view 名称,但不超过 2 个不同的名称模式。在您的示例中,您可以有两个不同的模型,每个模型都分配了一个特定的模式:
-- models/.../raw_jaffles.sql
{{ config(alias='jaffles', schema='raw') }}
-- models/.../clean_jaffles.sql
{{ config(alias='jaffles', schema='clean') }}
尽管如此,文件名仍然需要彼此不同。