如何在dbt中使用CETAS(Synapse Serverless Pool)?

How to use CETAS (Synapse Serverless Pool) in dbt?

在 Synapse Serverless Pool 中,我可以使用 CETAS 创建外部 table 并将结果导出到 Azure Data Lake Storage。

CREATE EXTERNAL TABLE external_table
WITH (
    LOCATION = 'location/',
    DATA_SOURCE = staging_zone,  
    FILE_FORMAT = SynapseParquetFormat
)  
AS
SELECT * FROM table

它将在 Synapse 中创建一个外部 table 名称 external_table,并将一个 parquet 文件写入我在 Azure Data Lake 中的暂存区。

我如何在 dbt 中执行此操作?

我试图做一些与 运行 我的带有 Synapse Serverless Pool 的 dbt 项目非常相似的事情,但是 运行 有几个问题。最终我被 CETAS 误导了。当您创建外部 table 时,它会创建一个文件夹层次结构,并在其中放置 parquet 文件。如果你要 运行 与你作为示例的脚本相同的脚本,它会失败,因为你不能用 CETAS 覆盖。所以 dbt 可以像任何其他模型一样 运行 它,但它不容易被覆盖。也许如果您每次脚本 运行 时都动态创建一个新的镶木地板并删除旧的,但这似乎是在突触和无服务器池交互的出血伤口上放一条小绷带。由于这个原因,我不得不改变我的架构。

我试图导出为 parquet 以维护列数据类型和描述,因此我不必 re-schematize。此外,我可以根据管道中的增量点创建 tables。我最终找到了一种方法,可以使用 dbt-synapse adapter 从已经具有数据类型模式的数据库中提取数据。然后,如果我需要增量 table,我可以通过 dbt 和 dbt-synapse 将其实现为 table 并以这种方式访问​​它。

导出的 parquet 文件的目标是什么?

也许我们可以找到其他解决方案?

Here's dbt-synapse-无服务器适配器 github 其中列出了无服务器池的注意事项。

我在这里为 CETAS(Synapse Serverless Pool)写了一个实现:https://github.com/intheroom/dbt-synapse-serverless

它是 dbt-synapse-serverless 的分支:https://github.com/dbt-msft/dbt-synapse-serverless

也可以在dbt中使用hooks来使用CETAS。