
dbt Core 2.0.0-rc.1 版本解读Exasol 适配器、Databricks Query Tags、解析安全视图与 ClickHouse 增强【免费下载链接】dbtdbt enables data analysts and engineers to transform their data using the same practices that software engineers use to build applications.项目地址: https://gitcode.com/GitHub_Trending/db/dbt本文基于 .changes/2.0.0-rc.1.md发布于 2026 年 9 月 2 日编写结合本仓库 crates 目录下的源码实现逐条剖析 dbt Core 2.0 首个候选版本的功能、修复与底层机制。读者将掌握Exasol 适配器 Phase 1 的完整能力边界与 profiles.yml 配置要点、Databricks query tags 的自动元数据注入与模型级配置规则、解析安全视图parse-safe views的设计原理以及 ClickHouse 增量策略与 DDL 渲染的进展同时了解本版本对 manifest 兼容性、安装分发与安全的修复细节。一、版本概览dbt Core2.0.0-rc.1于 2026 年 9 月 2 日发布是本仓库 CHANGELOG-fusion.md 所记录的 2.x 系列第一个 Release Candidate。该版本的内容可划分为五大板块Features新增 Exasol 适配器Phase 1、Databricks query tags、解析安全视图、ClickHouse 配置与增量策略增强、Jinja 渲染期引用溯源驱动 DBT05 lint 规则Fixes修复日志格式文件回归、Databricks 增量模型 deleteinsert 引号问题、泛化测试 SQL 资产路径冲突、v2 解析器 nullmacros键、Databricks 表属性声明顺序等十余项问题Under the Hoodoss CLI 产物改名为dbt预发布 sdist 安装提示Security包 tarball 解压时跳过符号链接/硬链接/设备文件Contributors共 12 位贡献者涉及 #14585、#15685、#15701、#15966、#16009、#16036、#16056、#16080 等 Issue。二、Exasol 适配器Phase 1首个原生 Exasol 支持2.1 能力全景2.0.0-rc.1为 dbt 引入了 Exasol 数据库适配器Phase 1 覆盖了从连接、元数据到物化的完整链路连接/认证TLS 与超时 profile 选项详见 2.2元数据适配器通过metadata/exasol模块crates/dbt-adapter/src/metadata/exasol/mod.rs实现 relation、column 等元数据读取agate/seed 类型转换包含HASHTYPE在内的类型映射与类型化 SQL 字面量见 crates/dbt-adapter/src/sql_types.rs 与 crates/dbt-adapter-sql/src/types/tests.rs保留字自动加引号由 crates/dbt-sql-keywords/src/lib.rs 与 crates/dbt-adapter/src/format_ident.rs 提供词法支撑完整宏包位于 crates/dbt-loader/src/dbt_macro_assets/dbt-exasol/物化table / view / incrementalappend、merge、deleteinsert、microbatch见 materializations/create_table_helpers.sql、materializations/incremental_strategies.sql、materializations/merge.sql快照timestamp / check 策略及 hard deletes见 materializations/snapshot.sql模型契约与约束、on_schema_change、grants、persist_docs表与视图、catalog 生成、source-freshness跨数据库 utilsdateadd/datediff/last_day/hash/bool_or/listagg/safe_cast/equals/split_part等见 utils/ 目录下的同名 SQL 宏distribute_by/partition_by/primary_key等 config交互式dbt init设置向导。2.2 profiles.yml 配置与交互式初始化从 crates/dbt-profile-schemas/src/exasol_config.rs 的InteractiveSetup实现可见交互式dbt init会依次提示以下字段字段默认值必填说明hostlocalhost是主机名或连接串port8563否Exasol 默认端口user—是用户名password—是密码Password 输入类型schema—是首次运行时若缺失会自动创建certificate_validationtrue是是否校验服务端 TLS 证书Docker/自签名场景建议回答 no交互式配置完成后setup_exasol_profile还会在未显式设置threads时默认填入 16exasol_config.rs#L146-L148。手写 profile 时完整的连接参数定义在 crates/dbt-schemas/src/schemas/profiles.rs#L1329-L1356 的ExasolDbConfig中# profiles.yml exasol: target: dev outputs: dev: type: exasol host: localhost port: 8563 user: dbuser password: {{ env_var(DBT_ENV_SECRET_EXASOL_PASSWORD) }} schema: analytics encryption: true # TLS 加密开关 certificate_validation: true # 服务端证书校验自签名环境设 false # certificate_fingerprint: # 需要时提供证书指纹 connection_timeout: 60 # 连接超时秒 query_timeout: 0 # 单语句执行超时秒0 表示不限制 idle_timeout: 600 # 空闲连接超时秒 threads: 16参数说明以源码注释为准password支持pass别名alias passconnection_timeout、query_timeout、idle_timeout均接受字符串或整数StringOrInteger其中query_timeout为每语句执行超时0 无限制idle_timeout为空闲连接超时certificate_validation对应交互式向导中的 TLS 证书校验问题。2.3 宏包结构佐证在 crates/dbt-loader/src/dbt_macro_assets/dbt-exasol/dbt_project.yml 声明的宏包中adapters子目录提供apply_grants、columns、metadata、persist_docs等适配器宏catalog.sql负责 catalog 生成relations.sql处理 relation 管理——与 changelog 中完整宏包的表述一一对应。这意味着 Exasol 用户开箱即得与 dbt-core 其他适配器一致的物化、快照、契约与文档能力无需额外安装宏包。三、Databricks Query Tags自动元数据 三级配置3.1 从配置到语句选项的调用链2.0.0-rc.1为 Databricks 引入 query tags包含自动注入的 dbt 元数据与profile 级、模型级配置。底层实现位于 crates/dbt-adapter/src/engine/databricks_query_tags.rs引擎在准备语句选项时调用query_tags_from_stateadapter_engine.rs#L274从 Jinja state 中取出model节点反序列化后读取节点的databricks_attr.query_tags模型/测试/快照或deprecated_config.__warehouse_specific_config__.query_tags单元测试/种子每个 tag 最终被转换为形如databricks.query_tag.key的 ADBC 语句选项QUERY_TAG_OPTION_PREFIX随语句提交到 Databricks资源覆盖范围包括模型、测试、快照、种子、单元测试on-run-start等 operation 与 internal 节点不产生任何语句选项见测试missing_state_and_operations_inherit_database_defaults_without_statement_optionsdatabricks_query_tags.rs#L262-L287。3.2 自动元数据与保留键每个节点都会自动附带三个元数据 tag且保留键不可被用户覆盖RESERVED_KEYSdatabricks_query_tags.rs#L14保留键含义说明dbt_core_versiondbt Core 版本由DBT_CORE_VERSION常量注入dbt_model_name模型/资源名取节点namedbt_materialized物化类型取节点materialized自动注入的值超过 128 字符会被截断MAX_AUTOMATIC_VALUE_CHARS 128测试truncates_automatic_node_values_to_128_characters验证了 127 字符 ::被截为 128。用户自定义 tag 若使用了这三个保留键会直接报Cannot use reserved query tag keys配置错误databricks_query_tags.rs#L135-L147。3.3 配置写法与校验规则profile 级配置写在profiles.yml的 Databricks 连接项下本版本支持模型级配置写在模型文件的config()或 YAML 属性中。实现约束源码可验证query_tags必须是JSON 对象字典否则报query_tags must be a JSON object所有 value必须是字符串如{cost_center: 3000}会报values must be strings测试rejects_invalid_shapes_and_non_string_valuesdatabricks_query_tags.rs#L390-L401插入顺序被保留自动 tag 在前、用户 tag 按书写顺序追加测试preserves_query_tag_insertion_order断言了m_model在a_shared之前databricks_query_tags.rs#L233-L260非模型资源测试、快照、种子、单元测试同样会获得dbt_model_name/dbt_materialized自动 tag其中单元测试不携带物化 tag。-- models/staging/stg_orders.sql {{ config( materializedincremental, databricks{ query_tags: {team: analytics, cost_center: cc42, purpose: orders_etl} } ) }}与 query tags 配套的修复包括Databricks 增量模型可在deleteinsert下正确引用 unique keys#15250、默认 query 注释中恢复 invocation ID#15689、表属性渲染保持声明顺序#16036、INSERT BY NAME REPLACE WHERE仅在 DBR 18.0 时生成#15999、模型/列约束仅在contract.enforced: true时应用#16056。3.4 Fusion 对 Python environment 配置的支持对于 Databricks serverless job 提交场景Fusion 现在接受environment_key与environment_dependencies并用于 serverless job submit关联 databricks/dbt-databricks#1636 与 #15966。这允许用户在 dbt 侧声明 Databricks Python 环境信息而无需在 Databricks 控制台单独维护。四、解析安全视图Parse-Safe Views索引导出后的可靠查询面4.1 要解决的问题dbt.graph_nodes、dbt.models、dbt.seeds、dbt.tests、dbt.snapshots、dbt.sources、dbt.analyses、dbt.operations、dbt.functions、dbt.columns这组视图允许对导出的索引views.sql进行独立查询。其关键保证是解析期查询永远不会静默暴露一个仅编译后才有值或从未填充的列。原理项目质量检查project quality check是解析期执行的 SQL此时物化的信息模式information schema尚未写出。解析安全视图读取的是解析期 epoch 数据见 crates/dbt-index-core/src/info_schema/parse_safe.rs 顶部的模块文档并遵循两条互相约束的规则命名与信息模式一致每个视图名称都对应一张信息模式表列名拼写也完全一致因此为检查写的 SQL 也能跑在发布后的信息模式上只暴露解析期已确定的列零行等于通过pass所以某个检查运行时仍为空的列不会导致检查失败——但它会被彻底移除而不是置 NULL引用一个不存在的列会触发 DuckDB binder 错误这是响亮的失败避免了WHERE compiled_code IS NULL 永远查不到东西式的静默假通过。4.2 视图清单与列裁剪从源码VIEWS常量parse_safe.rs#L181-L616可以看到完整视图集合按类别划分项目元数据projectproject_name、dbt_version、adapter_type、git_sha、git_branch、git_uncommitted_changes、ingested_at、packages仅 package_name、project_vars、project_env_vars每类资源一个视图models、seeds、snapshots、functions、analyses、hooks、sources含 source-only 列source_name、source_description、loader、loaded_at_field、data_testsnodes 与 test_metadata 的 LEFT JOIN保证 singular test 不丢失、unit_tests、checks检查本身也是节点可自省YAML 声明实体macros、groups、exposures、metrics、docs_blocks、saved_queries语义层semantic_models、semantic_entities、semantic_measures、semantic_dimensions、time_spines图结构dag_nodesnodes 与 exposures/metrics/unit_tests 侧表的 UNION ALL 装配、edges、node_columns。视图是信息模式同名表的严格子集相同的列名、更少的列。compiled_code、compiled_path、grain*、layer_inferred、search_text编译期写入以及unique_key、grants、constraints、on_schema_change等真实值在 config JSON 中都被有意排除。models视图甚至不提供raw_code索引为节省体积对模型 payload 做了trim_model_payload裁剪而snapshots、functions、analyses、hooks、checks则保留该列。4.3 缺表与列名校验create_view_sql在生成CREATE OR REPLACE VIEW dbt.name AS SELECT ... FROM dbt_internal.table时会逐一校验每个输出列确实是信息模式规范spec_for(Ns::Dbt, ...)中的列任何列名在索引表、信息模式任一侧发生重命名都会在测试期失败而非查询期失败模块文档中的 cross-check 设计。底层关系注册在dbt_internalschema 而非dbtschema使检查 SQL 无法绕过视图直接摸到底表——FROM dbt.nodes会 bind 失败而不是读到一堆空列。五、ClickHouse 增强DDL 渲染、增量策略与契约2.0.0-rc.1对 ClickHouse 的改动集中在三处新 configdefiner、sql_security、inserts_only可用projections、codec已声明但尚不可用关联 #14585DDL 渲染modelsettings与query_settingsconfig 现在会渲染进 DDL且版本门控 DDL 使用真实服务器版本——通过每进程一次的探测获得而非硬编码假设s3 与契约clickhouse_s3source()宏渲染s3()表函数模型契约端到端强制约束渲染、逐列 codec/ttl、真实列类型。s3source宏实现在 crates/dbt-loader/src/dbt_macro_assets/dbt-clickhouse/macros/materializations/s3.sql支持config_name、bucket、path、fmt、structure、aws_access_key_id、aws_secret_access_key、role_arn、compression、external_id等参数且要求 S3 配置名以s3结尾否则触发exceptions.raise_compiler_error增量策略与 on_schema_change增量策略deleteinsert、insert_overwrite、microbatch现在与 Python 适配器完全一致的解析与校验路径on_schema_changefail / append_new_columns / sync_all_columns在增量模型上通过 codec-aware ALTER 工作。六、Fixes兼容性与正确性6.1 Fusion 与 v2 解析器兼容nullmacros键v2 解析器对设置了overrides但无macros的单元测试不再输出 nullmacros键避免 dbt-core 反序列化 Fusion 产物 manifest 失败#16009YAML 配置形状对齐接受 dbt Core 容忍而 Fusion 拒绝的配置形态——序列型column_types、映射型event_time、标量policy_tags、旧版 contenteditable="false">【免费下载链接】dbtdbt enables data analysts and engineers to transform their data using the same practices that software engineers use to build applications.项目地址: https://gitcode.com/GitHub_Trending/db/dbt创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考