似乎 dbt 仅适用于单个数据库。
如果我的数据在不同的数据库中,那还能用吗?例如,如果我的数据湖正在使用 delta,但我想使用 Redshift 运行 dbt,那么 dbt 是否仍然适用于这种情况?
似乎 dbt 仅适用于单个数据库。
如果我的数据在不同的数据库中,那还能用吗?例如,如果我的数据湖正在使用 delta,但我想使用 Redshift 运行 dbt,那么 dbt 是否仍然适用于这种情况?
要使用 dbt,您需要已经能够select from
在您的仓库中获取原始数据。
一般来说,dbt 不是 ETL 工具:
[dbt] 不提取或加载数据,但它非常擅长转换已加载到仓库中的数据。这种“加载后转换”架构被称为 ELT(提取、加载、转换)。dbt 是 ELT 中的 T。[参考]
所以不,您不能同时将 dbt 与 Redshift 和 Deltalake 一起使用。相反,请使用单独的服务来提取数据并将其加载到您的 Redshift 集群中——dbt 不知道您使用哪种工具来执行此操作。
这个答案有一个细微差别——您可以使用 dbt 从 S3 或 GCS 中的外部文件中进行选择,只要您已将数据仓库设置为能够读取这些文件。对于 Redshift,这意味着设置Redshift Spectrum。(对于 Snowflake,这意味着设置一个外部表,在 BigQuery 上,您还可以查询云存储数据)
因此,如果您在 Deltalake 中读取的数据存在于 S3 中,如果您将 Redshift 集群设置为能够读取它,则可以使用 dbt 来转换数据!
您可以使用Trino和 dbt 连接到同一项目中的多个数据库。
Github 示例项目https://github.com/victorcouste/trino-dbt-demo包含一个完整的工作设置,您可以复制并适应您的需求。
@willie Chen 简短的回答是可以。更准确的答案不是dbt的意图。作为一种工具,它适用于 ETL 的转换部分。它用作数据仓库中已经存在的转换。我同意您应该将 Redshift Spectrum 用于 ETL。
路德
我会说 DBT 没有执行引擎,因此您不能使用它来将数据从一个源移动到另一个源,因为它本身不处理数据,它只会将 SQL 命令发送到数据库。
在任何情况下,如果您想将数据从 S3 移动到 Redshift,也许您可以使用Redshift Spectrum,您可以在其中将 S3 作为外部表进行查询。在那里,您将能够在 S3 和来自同一系统的 Redshift 数据上使用 DBT。