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

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

如果我的数据在不同的数据库中,这仍然有效吗?例如,如果我的 datalake 正在使用 delta,但我想使用 Redshift 运行 dbt,那么 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。

          路德

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-03-31
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-11-27
            相关资源
            最近更新 更多