dbt可以连接同一个项目的不同数据库吗?

Posted

技术标签:

【中文标题】dbt可以连接同一个项目的不同数据库吗?【英文标题】:Can dbt connect to different databases in the same project? 【发布时间】:2020-07-20 19:00:57 【问题描述】:

似乎 dbt 只适用于单个数据库。

如果我的数据在不同的数据库中,这仍然有效吗?例如,如果我的 datalake 正在使用 delta,但我想使用 Redshift 运行 dbt,那么 dbt 是否仍然适用于这种情况?

【问题讨论】:

【参考方案1】:

要使用 dbt,您需要已经能够select from 您仓库中的原始数据。

一般来说,dbt 不是 ETL 工具:

[dbt] 不会提取或加载数据,但它非常擅长转换已加载到仓库中的数据。这种“加载后转换”架构被称为 ELT(提取、加载、转换)。 dbt 是 ELT 中的 T。 [reference]

所以不,您不能同时将 dbt 与 Redshift 和 Deltalake 一起使用。相反,请使用单独的服务来提取数据并将其加载到您的 Redshift 集群中——dbt 不知道您使用哪种工具来执行此操作。

这个答案有细微差别 - 您可以使用 dbt 从 S3 或 GCS 中的外部文件中进行选择,只要您已将数据仓库设置为能够读取这些文件.对于 Redshift,这意味着设置 Redshift Spectrum。 (对于 Snowflake,这意味着设置一个 external table,在 BigQuery 上,您也可以query cloud storage data)

因此,如果您在 Deltalake 中读取的数据位于 S3 中,如果您将 Redshift 集群设置为能够读取它,则可以使用 dbt 来转换数据!

【讨论】:

【参考方案2】:

您可以使用Trino 与dbt 连接到同一项目中的多个数据库。

Github 示例项目 https://github.com/victorcouste/trino-dbt-demo 包含一个完整的工作设置,您可以复制并适应您的需求。

【讨论】:

【参考方案3】:

我会说 DBT 没有执行引擎,因此您不能使用它来将数据从一个源移动到另一个源,因为它本身不处理数据,它只会将 SQL 命令发送到数据库。

无论如何,如果您想将数据从 S3 移动到 Redshift,也许您可​​以使用Redshift Spectrum,您可以在其中将 S3 作为外部表进行查询。在那里,您将能够在 S3 和来自同一系统的 Redshift 数据上使用 DBT。

【讨论】:

【参考方案4】:

@willie Chen 简短的回答是可以。更准确的答案不是dbt的意图。作为一种工具,它适用于 ETL 的转换部分。它用作数据仓库中已经存在的转换。我同意您应该将 Redshift Spectrum 用于 ETL。

路德

【讨论】:

以上是关于dbt可以连接同一个项目的不同数据库吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用本地包编译 dbt 时出错

使用 dbt 的物化视图与表

dbt 包依赖简单测试

我的数据库连接(使用 Netbeans 和 XAMPP 连接)可以在不同的电脑上工作吗?

Navicat导出dbf生成dbt

dbt 到雪花连接 ERROR Profile Not Found