在 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: ¬_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: ¬_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
所以基于这个模型进行测试,我尝试至少使用这些选项:
- Link中的模型参考符号到描述中的另一个模型#
- docs 块引用符号,如 在描述中使用 docs 块#
这导致了变化:
其中 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 问题上请求的好功能。
我有一个带有 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: ¬_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: ¬_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
所以基于这个模型进行测试,我尝试至少使用这些选项:
- Link中的模型参考符号到描述中的另一个模型#
- docs 块引用符号,如 在描述中使用 docs 块#
这导致了变化:
其中 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 问题上请求的好功能。