如何在DBT模型中继承源数据库的文档?
如何将DBT源表列描述同步到下游模型列?
完全可行,无需重复编写列描述,以下是两种实用实现方式:
方法1:手动引用源列描述(适合列数少的场景)
在下游模型的schema.yml文件中,直接引用对应源表列的描述属性,就能继承源端的列描述。
示例:
假设源表的schema.yml定义如下:
version: 2 sources: - name: my_retail_source tables: - name: customer columns: - name: customer_id description: "客户唯一标识,自增主键" - name: customer_name description: "客户全名"
下游模型stg_customer的schema.yml可这样编写,直接复用源列描述:
version: 2 models: - name: stg_customer columns: - name: customer_id description: "{{ source('my_retail_source', 'customer').columns['customer_id'].description }}" - name: customer_name description: "{{ source('my_retail_source', 'customer').columns['customer_name'].description }}" # 模型新增列单独编写描述 - name: is_active description: "标记客户是否处于活跃状态"
方法2:用宏批量生成列描述(适合列数多的场景)
如果源表列数量较多,手动引用效率低,可以编写DBT宏,自动遍历源表列并同步描述。
步骤1:创建宏文件
在macros/目录下新建source_column_descriptions.sql,内容如下:
{% macro get_source_column_descriptions(source_name, table_name) %} {% set source_table = source(source_name, table_name) %} {% set columns = source_table.columns %} {% for column in columns %} - name: {{ column.name }} description: "{{ column.description | replace('"', '\\"') }}" {% endfor %} {% endmacro %}
步骤2:在模型schema中调用宏
下游模型的schema.yml可简化为:
version: 2 models: - name: stg_customer columns: {{ get_source_column_descriptions('my_retail_source', 'customer') }} # 新增列单独补充描述 - name: is_active description: "标记客户是否处于活跃状态"
后续源表列描述更新时,模型的描述会自动同步,无需手动修改。注意:若模型对源列做了重命名,需单独为重命名后的列编写描述,上述方法仅适用于与源列同名的字段。
内容的提问来源于stack exchange,提问作者Dyllan Hankins
相关产品推荐
相关产品推荐

