能否在profiles.yml中配置多输出?Azure Blob读取dbt模型报错求助
问题解答
环境信息
- dbt版本:1.3.1
- Python版本:3.9.6
- 使用适配器:dbt-synapse
1. 是否允许在单个profiles.yml中配置多个Profile?
完全允许。dbt支持在同一个profiles.yml文件中配置多个独立的Profile,每个Profile对应一套完整的数据源连接配置。你可以通过两种方式指定使用的Profile:
- 在
dbt_project.yml中通过profile字段设置项目默认使用的Profile - 执行dbt命令时通过
--profile <Profile名称>参数临时指定
2. 解决读取Azure Blob文件的编译错误
你的编译错误源于配置格式错误、output定义不规范以及source引用方式不正确,具体修复步骤如下:
步骤1:修正profiles.yml配置
首先修复profiles.yml的格式问题,将azure_blob作为dbt_project Profile下的合法output存在,同时修正yaml注释语法(yaml注释需用#而非--):
# profiles.yml default: dbt_project dbt_project: target: dev outputs: dev: type: synapse driver: 'ODBC Driver 17 for SQL Server' server: XXXXXXX database: XXXXXXX port: 1433 schema: XXXXXXX user: XXXXXXX password: XXXXXXX azure_blob_dev: # 给output起明确名称,便于模型引用 type: azure_blob account_name: XXXXXXX account_key: XXXXXXX container: data-platform-archive prefix: abc/FGr1/fox/
步骤2:定义Source配置
在项目的models目录下创建sources.yml文件,规范定义Azure Blob中的数据源:
version: 2 sources: - name: azure_blob_datasource database: data-platform-archive # 对应Azure Blob的容器名 schema: abc/FGr1/fox/ # 对应prefix指定的路径 tables: - name: abc_parquet identifier: abc.parquet # 要读取的文件名
步骤3:修正模型代码
修改模型文件dbt_stg_DL_abs_acm_users.sql,指定正确的output并规范引用source:
{{ config( materialized='view', output='azure_blob_dev' # 指定使用azure_blob的output ) }} select * from {{ source('azure_blob_datasource', 'abc_parquet') }}
步骤4:确认适配器安装
确保已安装兼容dbt 1.3.1的Azure Blob适配器,执行以下命令安装(如果未安装):
pip install dbt-azure-blob
替代方案:直接使用路径读取
如果不想定义source,也可以通过Azure Blob的直接路径读取文件(需替换<account_name>为你的存储账户名):
{{ config( materialized='view', output='azure_blob_dev' ) }} select * from parquet.`abfss://data-platform-archive@<account_name>.dfs.core.windows.net/abc/FGr1/fox/abc.parquet`
内容的提问来源于stack exchange,提问作者mxendire
相关产品推荐
相关产品推荐

