【历史文档】高阶技巧-缓存DataSource的使用
由ypyu创建,最终由small_q 被浏览 966 用户
更新
本文内容对应旧版平台与旧版资源,其内容不再适合最新版平台,请查看新版平台的使用说明
新版量化开发IDE(AIStudio):
https://bigquant.com/wiki/doc/aistudio-aiide-NzAjgKapzW
新版模版策略:
https://bigquant.com/wiki/doc/demos-ecdRvuM1TU
新版数据平台:
https://bigquant.com/data/home
https://bigquant.com/wiki/doc/dai-PLSbc1SbZX
新版表达式算子:
https://bigquant.com/wiki/doc/dai-sql-Rceb2JQBdS
新版因子平台:
https://bigquant.com/wiki/doc/bigalpha-EOVmVtJMS5
\
导语
很多用户刚来到平台对于平台的数据存储方式不是很清楚,本文对DataSource进行介绍。
平台使用缓存进行数据存储和缓存加速,每个模块运行后的结果都会自动保存到一个缓存地址中,并可以在平台磁盘上保存一段时间,通常是几小时至几天。平台的数据表读取、模块运行结果读取都可以通过DataSource命令获取。
获取平台数据
DataSource('表名').read(start_date=xxx,end_date=xxx,fields=[xxx,xxx]) 具体API的用法可以参考学院教程专题。
获取模块的运行结果
m1.data.read()
其中 m1是模块号,当m1模块运行后,m1.data存储了结果存放的缓存地址,通过.read()方 法可以读取其中的内容。
- 对于平台模块而言在第一次运行后结果会自动保存,如果输入的数据和模块参数没有变化,后面再次运行时会自动去读取第一次运行的结果而不会重新运行一次模块代码,这样就实现了加速的功能。
- 如果有时候发生异常改变参数但一直命中缓存,可以通过取消模块的“缓存加速”功能,强制重新运行模块。
计算结果的存储
将自定义的计算结果数据存为缓存,供其他策略/文档notebook使用。
- 假设计算了一个list或字典等对象变量名为xxx,可以执行DataSource().write_pickle(xxx)存储,运行后会返回一个结果保存的地址address;
- 假设计算了一个DataFrame对象,变量名为xxx,可以执行DataSource().write_df(xxx)存储,运行后会返回一个结果保存的地址address。
- 上述保存的对象均可以通过DataSource(address).read()读取查看。
利用缓存加速来读取数据
读取长时间的数据比较耗时,为了节省每次读取的时间,可以用M.cached模块进行缓存加速,即第一次用DataSource读取之后,后面读取时就会使用缓存的数据了。可以参照如下代码,自定义函数read_data使用DataSource读取数据,然后通过M.cached模块传入自定义的函数和参数,就能实现缓存加速来读取数据。
instruments = ['000008.SZA','000027.SZA']
start_date = "2020-01-01"
end_date = "2020-04-30"
kwargs = {
"table": "bar1m_CN_STOCK_A",
"instruments": instruments,
"start_date": start_date,
"end_date": end_date
}
def read_data(table, instruments, start_date, end_date):
df = DataSource(table).read(instruments, start_date, end_date)
return Outputs(data1=DataSource.write_df(df))
output = M.cached.v3(run=read_data, kwargs=kwargs)
alldata = output.data1.read()
print(alldata.head())
\