用途:通过 dbt 的模型化工作流管理 Materialize 流式管道。dbt-materialize 在 dbt-postgres 基础上扩展了 Materialize 专用物化、蓝绿部署宏与集群管理。
安装与配置:pip install dbt-core dbt-materialize,需 Materialize v0.68.0+。在 ~/.dbt/profiles.yml 中配置 type: materialize、host、port 6875、user、pass、dbname、schema,cluster 可选,sslmode: require,threads 必须为 1(Materialize 不支持并发 DDL 会话)。自动提交始终开启,不支持事务;生产部署建议使用服务账号。
主要能力:materialized_view 是流式转换的主要物化方式,支持 cluster、refresh_interval、partition_by、retain_history 配置;view 用于轻量转换;source 定义 Kafka、PostgreSQL、MySQL 等外部数据源,需预先存在 CONNECTION;source_table 支持 strict_mode 与 force_recreate;sink 将数据导出到外部系统,需专用 schema;table 映射为 CREATE MATERIALIZED VIEW;seed 可用。不支持 incremental(改用 materialized_view)和 snapshot。可为视图、物化视图、源和表添加 indexes。strict_mode 在编译期校验 schema 隔离规则。
蓝绿部署:在 dbt_project.yml 配置 deployment 变量后,依次执行 dbt run-operation deploy_init、dbt run --vars 'deploy: True' --exclude config.materialized:source config.materialized:sink、dbt run-operation deploy_await、dbt run-operation deploy_promote、dbt run-operation deploy_cleanup。deploy_promote 通过原子 ALTER SCHEMA/CLUSTER SWAP WITH 切换,并自动切换 sink。
集群管理宏:create_cluster、drop_cluster、set_cluster。
测试与契约:标准测试可用,可配置 store_failures;单元测试需 dbt-materialize v1.8.0+;不支持源新鲜度检查。模型契约仅强制 not_null。
限制:threads 必须为 1;无事务;dbt show 的 LIMIT 有性能影响;连接需外部预建;集群需预先存在;不支持 dbt 内置 grants;蓝绿部署要求 sink 隔离;关系名上限 255 字符。