饿了吗外卖网站怎么做,浙江省建设监理管理协会网站,给wordpress注册用户发邮件,兰州企业网站建设dbt项目采用工程化思维#xff0c;数据模型分层实现#xff0c;支持描述模型文档和测试#xff0c;非常适合大型数据工程项目。但也需要用户编写大量yaml描述文件#xff0c;这个过程非常容易出错且无聊。主要表现#xff1a;
手工为dbt模型编写yaml文件#xff0c;这过…dbt项目采用工程化思维数据模型分层实现支持描述模型文档和测试非常适合大型数据工程项目。但也需要用户编写大量yaml描述文件这个过程非常容易出错且无聊。主要表现
手工为dbt模型编写yaml文件这过程可能会导致错误和拼写失误。手工编写yaml文件非常耗时特别是在包括很多模型的大型项目中。当数据模型发生变化时更新yaml文件可能是一件令人头痛的事情。确保所有yaml文件看起来一致并遵循相同的最佳实践具有挑战性。
dbt-codegen简介
dbt-lab提供了 dbt-codegen工具包实现一组宏用于dbt代码并在命令行中输出结果。Codegen旨在为dbt模型自动生成YAML文件解决与手动创建文件的痛点挑战。Codegen是如何解决这些问题的 Codegen自动化YAML文件创建的整个过程。它基于dbt模型生成YAML配置减少了手动干预的需要。这大大节省了时间并最大限度地减少了错误的风险。 通过自动生成YAML文件Codegen确保了所有dbt模型的一致性和标准化。它遵循预定义的规则和模板消除了配置差异的可能性。 Codegen具有高度可扩展性允许你有效地管理许多dbt模型。随着数据转换需求的增长Codegen适应规模为处理众多模型和配置提供无缝解决方案。
实现过程如下
Codegen通过分析dbt模型并提取相关信息以生成YAML文件过程包括
Codegen分析dbt模型提取列名、数据类型和关系等细节。然后基于分析结果生成YAML配置包括模型、列和关系。Codegen应用预定义模板确保标准化配置和一致性最终输出是一组可以在dbt项目中使用的YAML文件配置信息。
完整功能列表
generate_source (source)generate_base_model (source)create_base_models (source)base_model_creation (source)generate_model_yaml (source)generate_model_import_ctes (source)
dbt-codegen实战
我们看到该包可用于为源和模型列表生成YAML此外还可以用于为源的基本模型生成SQL。下面介绍几个常用的代码生成功能。读者可以在上文介绍的入门项目中测试。
安装
packages: - package: dbt-labs/dbt_utils version: 1.3.0 - package: dbt-labs/codegen version: 0.12.1运行dbt deps安装包。安装成功后包文件将被安装到dbt_packages目录下。
示例1 生成schema.yml
在命令行运行直接输出到控制台
dbt run-operation generate_source --args schema_name: shop# 多个参数
dbt run-operation generate_source --args {schema_name: shop, database_name: raw, table_names:[table_1, table_2]}
也可以直接输出到文件
dbt --quiet run-operation generate_source --args {table_names: [orders]} models/staging/jaffle_shop/_sources.yml还可以编码方式执行拷贝宏代码至DBT项目中, 因为是一次性任务可以放置analysis 目录下, 然后编译代码
{{ codegen.generate_source(raw_jaffle_shop) }}
# 包括多个参数
{{ codegen.generate_source(schema_name jaffle_shop, database_name raw) }}生成结果大致如下
version: 2sources:- name: shopdatabase: rawschema: shoptables:- name: customersdescription: - name: ordersdescription: - name: paymentsdescription: 示例2 生成模型yaml文件
model_names (required): The model(s) you wish to generate YAML for.upstream_descriptions (optional, defaultFalse): Whether you want to include descriptions for identical column names from upstream models and sources.include_data_types (optional, defaultTrue): Whether you want to add data types to your model column definitions.
dbt run-operation generate_model_yaml --args {model_names: [customers]}生成结果
version: 2models:- name: customersdescription: columns:- name: customer_iddata_type: integerdescription: - name: customer_namedata_type: textdescription: 当然也可以在analyse模型中编码方式生成
{{ codegen.generate_model_yaml(model_names[customers]
) }}还可以使用辅助函数代码。Get_models并指定一个目录和/或前缀以获得所有匹配模型的列表这些模型将被传递到model_names列表中。
{% set models_to_generate codegen.get_models(directorymarts, prefixfct_) %}
{{ codegen.generate_model_yaml(model_names models_to_generate
) }}助手方法可以在源码中找到请参考下面截图
总结
本文介绍dbt-codegen工具它可以帮助我们快速生成dbt模型描述文件、生成源等代码。我们介绍多种生成方式包括命令行和分析模型代码等有想法的读者还可以考虑编写vscode插件实现。更多示例及详细文档可以参照官方文档。