如何在Snowflake(和dbt)上设置从开发到生产的工作流程?

5

我们目前正在实施Snowflake和dbt,并希望在开发和生产之间分割Snowflake数据库,这样我们就可以在发布新数据模型之前对其进行测试。我们计划使用dbt来创建所有未来的数据模型。我有关于工作流程物流方面的几个问题:

  1. 我们如何保持dev和prod同步?(或者它们应该保持同步吗?)我知道在Snowflake中有一个克隆功能,可以重新创建元数据而不复制数据。我们应该将我们的prod数据库克隆到dev吗?每天都要克隆吗?那些在dev中具有物化资源的用户会失去这些数据。

  2. 我们是否应该将部署到prod作为CICD流程的一部分,并且只有完全合并的拉取请求(在Snowflake dev上经过测试)才能部署到Snowflake prod?那是否会造成太多瓶颈?

想了解其他人如何构建其工作流程,以维护dev和prod Snowflake环境。


你所描述的“dev”听起来像是“staging”和“dev”的混合,如果你想要“测试发布”,通常是一个“staging”的事情,也就是部署两次,第一次是“staging clone”,以确保生产环境不会出现问题。而“dev”有时可能更随意,因为人们希望能够构建临时/正在进行的解决方案,因此每晚的破坏都会很痛苦。所以这并不是一个完整的答案,但在过去,我们有prod/staging/night-qa-test/dev,其中中间两个每天都会完全重建。 - Simeon Pilgrim
2个回答

3
一种常见的实现方式是为各个用户创建独立的开发模式架构(例如 dbt_lfolsom),当用户执行任何类型的 dbt run 时会写入并覆盖该模式,然后在执行“生产”作业时会写入和覆盖单个产品模式(例如 analytics)。
“以开发方式运行 dbt” 意味着使用 dbt Cloud 或 dbt CLI 的个人用户执行 dbt 命令,以便将数据写入专门用于开发的专用模式。
“以生产方式运行 dbt” 意味着运行在 dbt Cloud 中配置为作业的 dbt 命令(或使用其他编排工具)将数据写入特定的“prod”目标模式。
请参阅关于在生产中运行 dbt 的这篇文章
使用 dbt Cloud,您还可以写入 PR 特定的模式,当您创建或更新 GitHub PR 时,这些模式会自动创建。这可能是您想要用于 CI/CD 的内容。请查看关于选项的这篇文章
您可以(应该)将生产作业配置为仅在完全合并的代码上运行。
如果由于某种原因,您确实需要将生产和开发分为不同的数据库而不是不同的模式,则需要创建使用相同 Git 远程仓库中的代码但被配置为(在 dbt Cloud 或使用您的 profiles.yml)写入不同 Snowflake 数据库的不同 dbt 项目。但我认为这是一种不常规的方法,需要更多的工作。

1

要更改运行代码的数据库,请前往右上角 ->您的个人资料 ->在左侧的凭据中选择项目,在dev部分填写(此处仅选择模式),并在其上方覆盖此项目的默认值。

此默认设置仅针对您更改,并将由带删除线的默认设置和其旁边的您的选择指示。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接