在之前的一篇文章中,我们探讨了如何使用 Materialize 和 Metabase 构建 流式分析管道。简单来说,您可以对流式数据源编写一些 SQL 语句,让 Materialize 高效地维护您的结果,随着新数据的到来保持最新,并保持仪表盘轻量化和新鲜。这一次,我们将探讨如何使用 dbt 来管理和记录整个工作流程。
使用 dbt 转换流式数据
尽管您可能希望不间断地运行您的分析,但您可能不希望放弃使您在批量操作中保持高效的工具。如果可以使用完全相同的工具来管理您的流式分析管道,会怎么样呢?虽然 dbt 是针对批量构建的,但作为一个框架,它足够灵活,可以作为批量和流式后端上统一的转换层;只要后端是 SQL 基础的,底层的实现细节就无关紧要。
我们构建了dbt-materialize适配器,将流式转换(以及更多)引入到dbt中。如果这看起来很熟悉...
{{ config(
materialized ='materializedview'
) }}
SELECT fi.icao24,
manufacturername,
model,
operator,
origin_country,
time_position,
longitude,
latitude
FROM {{ ref('stg_flight_information') }} fi
JOIN {{ ref('stg_icao_mapping') }} icao ON fi.icao24 = icao.icao24
…那就是全部了:您使用SQL和一些Jinja定义您的业务逻辑作为dbt模型,部署管道(一次),Materialize就会为您保持一切运行。对于原本需要每天多次重新部署模型、维护复杂的增量逻辑,并且为了优化速度(比如,保证正确性)而做出一些严重权衡的场景,使用像Materialize这样的专用流数据库可以更快地让您走得更远。
记录流式分析管道
dbt不仅标准化了我们推理和管理分析工作流程的方式,还让文档再次变得酷(好吧,在dbt出现之前它真的酷吗?)。使用几个YAML文件,您可以将数据治理引入流式管道,加速救命过程,如数据发现和血缘,甚至确保您的指标保持稳定。如果将您的dbt项目视为业务逻辑和文档的真相来源,那么您的BI工具岂不应该是…同步的吗?
如何同步dbt和Metabase
如果您想将dbt和Metabase更紧密地结合在一起,那么dbt-metabase插件是一个很好的起点。例如,您可以使用它来
将Metabase项作为dbt暴露项进行文档化
了解dbt项目的端到端依赖关系需要跟踪项目外部的依赖关系,例如Metabase问题和仪表板。在DAG中跟踪这些依赖关系的一种方法是将对模型的任何下游使用声明为暴露(注意橙色节点!),您可以使用插件自动生成
将dbt元数据传播到Metabase数据模型
如果您已经在dbt中记录了数据模型,该插件还允许您从现有的模型属性和配置(如表和列描述、语义类型定义以及其他有助于在数据生产者和消费者之间创建共享上下文的有用元数据)推导出Metabase数据模型
关于使用dbt管理流式分析管道还有很多可以探索的,所以如果您想亲自动手,请查看用于创建上述示例的示例演示以及Materialize文档。