在 dbt yaml 文件中引用来自 md 文件的 table 值

Referencing table values from md file in dbt yaml files

我有一个带有 table 的降价文件,我还有另一个 dbt schema.yml 文件,用于提供和生成文档。传统上,我在 schema.yml 中输入 table 名称和列名称以及列名称的描述,但现在我想到我想将 md 文档中的列名称引用到 yaml 文件中,而不是手动输入。

这是我的 doc.md 文件的样子

{% docs column_description %}

| COLUMN\_NAME                   | DESCRIPTION                                                               |
| ------------------------------ | ------------------------------------------------------------------------- |
| cycle\_id                      | Customer cycle\_id(todays start sleep time to next days start sleep time) |
| user\_id                       | Customers user\_id                                                        |
| yes\_alcohol                   | User consumed alcohol or not                                              |
| blank\_alcohol                 | User did not answer or user answered "No"                                 |
                    


{% enddocs %}

目前,这是我的 schema.yml 文件的样子

version: 2

models:

- name: journal_pivot_dev
    description: One for for each journal entry of within one customer cycle
    columns:
      - name: cycle_id
        description:  Customer cycleid
        tests: &not_null
          - not_null:
              severity: warn
      - name: user_id
        description: customer userid
        tests:
          - not_null:
              severity: warn
      - name: yes_alcohol
        description: User consumed alcohol or not
        tests: &values_accepted
          - accepted_values:
              severity: warn
              values: [0,1]
      - name: blank_alcohol
        description: User did not answer          
        tests: *values_accepted 

我尝试了什么:

version: 2
    
    models:
    
    - name: journal_pivot_dev
        description: One for for each journal entry of within one customer cycle
        columns:
          - name: cycle_id
            description:  '{{ doc(column_description") }}'
            tests: &not_null
              - not_null:
                  severity: warn
          - name: user_id
            description: '{{ doc(column_description") }}'
            tests:
              - not_null:
                  severity: warn
          - name: yes_alcohol
            description: '{{ doc(column_description") }}'
            tests: &values_accepted
              - accepted_values:
                  severity: warn
                  values: [0,1]
          - name: blank_alcohol
            description: '{{ doc(column_description") }}'          
            tests: *values_accepted 

但是当我这样做时,描述并没有呈现为 cycle_id,而是在 md 文件中为我提供了整个 table。

我期待这样的事情

TLDR:考虑到该功能,您目前无法尝试执行此操作。

当您现在在 dbt 中调用 {{ docs('filename.md') }} 函数时,正在执行的代码(请参阅来自 dbtlabs 的 doc() github)只是导入编译后的版本整个降价文件(当然是在确保它是有效的、非零长度的降价文件之后)。

有争议,可以在文档本身中更好地说明这一点: https://docs.getdbt.com/reference/resource-properties/description#use-a-docs-block-in-a-description


让我们谈谈备选方案。

我们创建您的每个文档并尝试将它们导入到一个“聚合”文档中如何?

所以,使用全新的 dbt 项目 my-project 让我们看看:

新项目布局:

    | analysis
    | data
    | macros
    | models
         | docs
            | agg_table.md
            | table_item_1.md
            | table_item_2.md
            | table_item_3.md
         | examples
            | schema.yml
            | my_first_dbt_model.sql
            | my_first_dbt_model.sql
     | .gitignore
     | dbt_project.yml

其中 schema.yml 类似于:


version: 2

models:
    - name: my_first_dbt_model
      description: '{{ doc("agg_table") }}'
      columns:
          - name: id
            description: '{{ doc("table_item_1") }}'
            tests:
                - unique
                - not_null

所以基于这个模型进行测试,我尝试至少使用这些选项:

这导致了变化:

其中 agg_table.md 类似于:

{% docs agg_table %}

### Agg Table

| COLUMN\_NAME                   | DESCRIPTION                                                                   |
| ------------------------------ | ----------------------------------------------------------------------------- |
| table_item_1                   | {{ docs("table_item_1") }}                                                  |
| table_item_2                   | {{ docs("table_item_2") }}                                                  |
| table_item_3                   | {{ docs("table_item_3") }}                                                  |
| table_item_4                   | {{ docs("table_item_4") }}                                                  |
                    
{% enddocs %}

{% docs agg_table %}

### Agg Table

| COLUMN\_NAME                   | DESCRIPTION                                                                              |
| ------------------------------ | ---------------------------------------------------------------------------------------- |
| table_item_1                   | [first_model_description](#!/model/model.my_new_project.my_first_dbt_model#description)  |
| table_item_2                   | [first_model_columns](#!/model/model.my_new_project.my_first_dbt_model#columns)          |
| table_item_3                   | [table_item_doc](#!/docs/docs.my_new_project.table_item_3)                               |
| table_item_4                   | [table_item_doc](#!/docs/docs.my_new_project.table_item_4#description)                   |
                    

{% enddocs %}

但到目前为止,dbt 似乎完全缺少为 jinja 宏/引用预处理降价文档的步骤。这些链接只是纯粹的 HTML,实际上并没有“编译”任何内容。

示例结果:

尽管在 github 问题上请求的好功能。