intake_xarray的NetCDFSource为何不读取用户输入参数?
Intake NetCDF数据源参数不生效问题解决
问题场景
使用如下catalog.yml配置NetCDF数据源:
metadata: description: Sample catalog information. version: 1 plugins: source: - module: intake_xarray sources: this_source: args: storage_options: client_kwargs: endpoint_url: https://mys3 verify: false key: mykey secret: mysecret urlpath: s3://thispath/{{ date.strftime('%Y/%m/%Y%m%d') }}.nc chunks: {} xarray_kwargs: engine: h5netcdf description: CREATE sample driver: netcdf metadata: {} parameters: date: default: '2025-01-01T00:00:00' description: Date and hour of data. min: '2020-01-01T00:00:00' type: datetime
通过以下代码调用时,无论传入任何date参数,始终读取默认日期2025-01-01对应的文件:
from datetime import datetime import intake cat = intake.open_catalog('catalog.yml') ds = cat.this_source(date=datetime(2024, 1, 1)).read()
CSV数据源用相同参数化方式可正常工作,仅NetCDF源出现此问题。
解决步骤
1. 修复YAML语法错误
原配置中metadata.description存在缩进错误,会导致配置解析异常,将其改为单行格式:
metadata: description: Sample catalog information. version: 1
2. 启用模板渲染
Intake的NetCDF驱动默认未开启参数模板渲染,需在数据源配置中添加template: true字段,确保urlpath中的Jinja2模板能被正确解析:
sources: this_source: args: # 保留原有args内容不变 description: CREATE sample driver: netcdf metadata: {} template: true # 新增此行,启用模板渲染 parameters: # 保留原有parameters内容不变
3. 验证修复
修改配置后重新运行代码,传入的date参数将正确替换到urlpath中,读取对应日期的NetCDF文件。
内容的提问来源于stack exchange,提问作者francesco lc
相关产品推荐
相关产品推荐

