<@U088WCP3B4P> 我有个疑问,下面代码里的配置是生成完表格就可以删掉吗,还是要一直写在那...
# ask-elementary-ai
l
@kapa.ai 我有个疑问,下面代码里的配置是生成完表格就可以删掉吗,还是要一直写在那里?
Copy code
my_project:
  materialized: "{{ 'table' if target.name == 'prod-cloud' else 'view' }}"

elementary:
  +schema: "elementary"
k
A message from kapa.ai
你的问题是关于 dbt_project.yml 里的如下配置:
Copy code
yaml my_project:   materialized: "{{ 'table' if target.name == 'prod-cloud' else 'view' }}"  elementary:   +schema: "elementary"
这些配置**不是只在生成表格时需要,应该一直保留在 dbt_project.yml 文件中**。 -
my_project
下的
materialized
配置用于控制你自己项目模型的物化方式(比如生产环境用 table,其他环境用 view),这通常是你项目的全局设置,建议一直保留。 -
elementary
下的
+schema: "elementary"
配置是为了让 Elementary 相关的表都生成在单独的 schema(比如 elementary),这也是 Elementary 官方推荐的做法,应该一直保留,否则 Elementary 的表会和你其他表混在一起,影响管理和使用。 只有在你需要更改 Elementary 的 schema 或物化方式时,才需要修改这些配置。如果你删除这些配置,后续 Elementary 生成的表就会回到默认 schema 或受全局 materialized 配置影响,可能导致功能异常或数据混乱。 官方文档明确说明这些配置需要放在 dbt_project.yml 里,并且没有提到可以在生成表后删除它们【参考:[官方文档](https://docs.elementary-data.com/oss/quickstart/quickstart-cli-package#step-by-step%3A-install-elementary-dbt-package)】。
l
@kapa.ai 但是写在这里,就只能跟着模型的数据库放在一起,就不能单独用一个数据库里
k
A message from kapa.ai
你说得对,如果只在
dbt_project.yml
里配置 `+schema: "elementary"`,Elementary 的表默认会和你的模型在同一个数据库下的不同 schema 里。 但如果你想让 Elementary 的表单独放在另一个数据库里,是可以实现的。 你需要在
dbt_project.yml
里同时指定
+database
和 `+schema`,比如:
Copy code
yaml models:   elementary:     +database: your_elementary_db     +schema: elementary
这样 Elementary 的表就会被写入到
your_elementary_db
这个数据库下的
elementary
schema,而不会和你的业务模型混在一起【参考: [Slack Q&A](https://slack.com/archives/C02CTC89LAX/p1666974581573519), [Slack Q&A](https://slack.com/archives/C02CTC89LAX/p1686886234811099), [Slack Q&A](https://slack.com/archives/C02CTC89LAX/p1670857782412889) 】。 注意: - 你还需要在
profiles.yml
里为 Elementary CLI(比如
edr
命令)配置相应的数据库信息,这样 Elementary 工具才能正确读取和写入 Elementary 的表。 - 某些数据库(如 Postgres)不支持跨数据库引用模型,可能会遇到限制或报错(如 "Cross-db references not allowed in postgres"),这时就无法将 Elementary 表单独放在另一个数据库【参考:[Slack Q&A](https://slack.com/archives/C02CTC89LAX/p1701400872234469), [Slack Q&A](https://slack.com/archives/C02CTC89LAX/p1708967073374329) 】。 总结: - 只写 `+schema`,Elementary 表和模型在同一数据库。 - 写
+database
和 `+schema`,Elementary 表可以单独放在另一个数据库(前提是你的数据仓库支持跨库引用)。 - 如果数据库不支持跨库引用,则无法实现 Elementary 表和模型分库。 如有具体数据库类型,可以进一步确认是否支持此功能。