在之前的博文中,我们介绍了如何使用 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 不仅标准化了我们思考和管理分析工作流的方式,还让文档再次变得流行(好吧,它以前真的流行过吗?)。通过一些 YAML 文件,您可以为流式管道引入数据治理,加快数据发现和血缘关系等关键流程,甚至 确保您的指标保持稳定。如果趋势是将被 dbt 项目视为业务逻辑和文档的真相来源,那么您的 BI 工具不应该……同步吗?
如何同步 dbt 和 Metabase
如果您想让 dbt 和 Metabase 更紧密地结合,dbt-metabase 插件 是一个很好的起点。例如,您可以使用它来
将 Metabase 项目记录为 dbt 暴露
要深入了解 dbt 项目的端到端依赖关系,还需要能够跟踪 dbt 项目之外的依赖关系,例如 Metabase 问题和仪表板。在 DAG 中跟踪这些依赖关系的一种方法是将下游模型的使用声明为 暴露(exposures)(请注意橙色节点!),您可以使用该插件自动生成这些暴露。

将 dbt 元数据传播到 Metabase 数据模型
如果您已经在 dbt 中记录了数据模型,该插件还允许您从现有的模型属性和配置中派生 Metabase 数据模型,例如表和列的描述、语义类型定义以及其他有助于创建数据生产者和消费者之间共享上下文的有益元数据。

在使用 dbt 管理流式分析管道方面还有许多内容值得探索,因此如果您有兴趣动手尝试,请查看用于创建上述示例的 示例演示 和 Materialize 文档。