在上一篇文章中,我们详细介绍了如何使用 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 文档。