我在这里阅读“参数” ,想知道我是否可以定义目录级别的参数,以便以后在目录源的定义中使用?
考虑一个简单的 YAML 目录,它有两个来源:
sources:
data1:
args:
urlpath: "{{CATALOG_DIR}}/data/{{snapshot_date}}/data1.csv"
description: ''
driver: intake.source.csv.CSVSource
metadata: {}
data2:
args:
urlpath: "{{CATALOG_DIR}}/data/{{snapshot_date}}/data2.csv"
description: ''
driver: intake.source.csv.CSVSource
metadata: {}
请注意,两个数据源(data1 和 data2)都使用snapshot_date
参数内的urlpath
参数?有了这个定义,我可以加载数据源:
cat = intake.open_catalog("./catalog.yaml")
cat.data1(snapshot_date="latest").read() # reads from data/latest/data1.csv
cat.data2(snapshot_date="20211029").read() # reads from data/20211029/data2.csv
请注意,这cat.data1().read()
不起作用,因为snapshot_date
默认为空字符串,因此 csv 驱动程序找不到路径“./data//data1.csv”。
我可以通过向每个(!)源添加部分来设置默认值,parameters
如下所示。
sources:
data1:
parameters:
snapshot_date:
type: str
default: "latest"
description: ""
args:
urlpath: "{{CATALOG_DIR}}/data/{{snapshot_date}}/data1.csv"
description: ''
driver: intake.source.csv.CSVSource
metadata: {}
data2:
parameters:
snapshot_date:
type: str
default: "latest"
description: ""
args:
urlpath: "{{CATALOG_DIR}}/data/{{snapshot_date}}/data2.csv"
description: ''
driver: intake.source.csv.CSVSource
metadata: {}
但这看起来很复杂(太多重复的代码)并且对最终用户来说有点不方便——如果用户想要从给定日期加载所有数据源,他必须snapshot_date
在初始化时显式地为每个(!)数据源提供参数。IMO,如果我用户可以在初始化目录时提供一次这个值,那就太好了。
有没有办法可以snapshot_date
在目录级别定义参数?以便:
- 我可以在目录参数的 YAML 定义中设置默认值(例如,在我的示例中为“最新”)
- 或者可以在调用期间在运行时传递目录的参数值
intake.open_catalog("./catalog.yaml", snapshot_date="20211029")
- 在该目录的数据源定义中应该可以访问该值吗?
cat = intake.open_catalog("./catalog.yaml", snapshot_date="20211029")
cat.data1.read() # will return data from ./data/20211029/data1.csv
cat.data2.read() # will return data from ./data/20211029/data2.csv
cat.data2(snapshot_date="latest").read() # will return data from ./data/latest/data1.csv
cat = intake.open_catalog("./catalog.yaml")
cat.data1.read() # will return data from ./data/latest/data1.csv
cat.data2.read() # will return data from ./data/latest/data2.csv
提前致谢