我在一家初创公司工作,正在从头开始建立我们的分析技术堆栈。由于资源有限,我们专注于使用第三方工具,而不是构建自定义管道。
我们的堆栈如下:
英语教学工具:Fivetran或Hevo
数据仓库:BigQuery
转换:dbt cloud
反向ETL:Hightouch(如果我们使用Fivetran - hevo内置了反向ETL)
BI Tool:表
我遇到的问题是:
对于Fivetran或Hevo,在下面的工作流程中有一个中断,我们必须切换工具,并且工具本身内部没有集成,无法根据前一个作业的完成顺序触发作业。
用例(工作流):将数据加载到仓库->变换使用印度生物技术部→将etl数据从仓库转回mailchimp等工具,用于营销目的(例如,未执行某些操作的用户id列表,因此我们希望向其发送提示电子邮件,该列表通过每天运行的DBT作业生成)
下面是这些工作流在各自的工具(E = Extract, L = Load, T = Transform)中的样子
Hevo:E+L (hevo) ->工作流程中断->T:印度生物技术部工作(无法触发hevo UI)→工作流程中断->反向E+L:可以在hevo UI内完成,但不能由dbt作业触发
Fivetran:E+L (five - tran) ->T: dbt作业(可以在五层用户界面内触发)->工作流程中断->反向E+L与一家名为hightouch的公司合作,但无法根据fivetran/dbt作业的完成触发hightouch作业。
我们当然可以以一种基于时间的方式同步这些,但这意味着如果前一个作业失败,后续作业仍然运行,这意味着产生不必要的成本,并且一旦你调试了它,能够从最后一个断点重新触发整个工作流也是很好的。
从网上阅读,我认为像apache气流可以用于这种类型的用例,但这是迄今为止我所得到的。
提前感谢。
你正在寻找一个协调器的数据。气流是最受欢迎的选择,但Dagster和Prefect是较新的挑战者,它们具有一些非常好的功能,专门为管理数据管道而构建(相对于气流,它是为不一定传递数据的任务管道而构建的)。
这3个工具都是开源的,但是编排器很快就会变得复杂,除非你对部署kubernetes和管理复杂的基础设施很熟悉,否则你可能会考虑使用托管(付费)解决方案。(主办气流品牌为天文学家)
由于这种复杂性,您应该问自己是否真的需要一个编排器,或者是否可以等待实现一个。有一些hack/脆弱的方法来协调这些工具(例如,cron, GitHub Actions,让下游工具轮询新数据等),在初创公司的规模(一个人的数据团队),在一段时间内,你实际上可以用一个hack的解决方案更快地移动。如果在加载数据和转换数据之间有1小时的延迟,这真的会影响用户吗?与花时间建模更多数据或构建更多报告相比,缩小这一差距能为企业增加多少价值?实际上对一个人的空间,你可能看周的努力,直到一个协调器是增加价值;只有你自己知道投资是否有ROI。
我使用Dagster来编排多个dbt项目或dbt模型与其他数据管道进程(例如数据库初始化,pyspark等)
这是一个更详细的描述和演示代码:
- 按顺序执行的三个dbt模型(铜、银、金)
- Dagster编排代码
您可以尝试下面的工作流,其中您需要使用更多额外的工具,但它不需要您在编排上进行任何定制工程工作。
E+L (five - tran) ->T:使用造船厂触发dbt云作业->反向E+L:在dbt云作业完成时触发Hightouch或Census同步
这应该在单个流中运行整个管道。