多品种金融数据高效导入丨DolphinDB 希施玛历史数据自动化导入模块介绍

该页面介绍 DolphinDB 的 CsmarData 模块,用于将希施玛历史数据按结构化流水线高效导入,并说明本文覆盖范围。

Source: https://dolphindb.cn/blogs/174

What this page covers

技能认证特训营第二期报名入口与优惠提示

页面顶部提供活动报名入口,并提示福利优惠信息。

文章标题、作者与发布日期

页面包含文章标题、作者署名与发布日期信息。

引言:希施玛历史数据导入挑战与 CsmarData 模块定位

说明希施玛历史数据的结构与高频特征对入库提出需求,并介绍 DolphinDB 的 CsmarData 模块及本文范围。

历史数据文件结构要求与市场代码表

给出希施玛原始文件目录结构要求、注意事项,并提供市场名称与代码对照表。

模块介绍:组成部分与支持的数据源/市场

概述 CsmarData 模块的三大部分,并说明股票与期货期权的数据源与覆盖市场信息(部分以图片表格呈现)。

数据表结构:csvSchema 与 dfsSchema

说明 _tbSchema_ 目录下 schema 相关内容的用途与分层结构(stock/futures)。

数据库与分区表创建:CreateDB.dos / CreateTB.dos 与分区方案

说明创建数据库/分布式表的模块文件,并给出股票与期货期权各数据源的分区与排序方案。

去重方案:删除已导入日期数据与 isDuplicated 去重

描述导入前删除库内对应日期数据,并在导入当日数据前采用以内存去重的策略(部分以图片表格呈现)。

数据导入:模块文件、主要函数与参数说明

介绍导入模块组成,并说明主要函数的语法、参数约束与功能描述。

使用示例:准备数据、上传模块、导入股票与期货期权

分步骤展示目录结构示例、模块上传位置说明,并给出股票与期货期权数据导入脚本示例。

注意事项:fileDir 查找规则与数据源/市场字段填写

说明 fileDir 目录层级要求、日期筛选逻辑,以及 markets 参数与支持市场的填写要求示例。

性能测试:模块定位、测试环境、性能结果与优化建议

给出性能测试动机与结论性描述、软硬件环境、导入性能结果,以及吞吐量提升建议。

总结:CsmarData 的流水线与分布式存储整合与适用场景

总结模块在多市场、多数据源高频数据入库方面的方案特性,并呼应性能测试结论性表述。

附录:模块代码下载、异常处理与存储模型设计(字段映射)

附录提供模块压缩包下载链接、常见异常输出信息表,并列出多类数据的字段信息与说明。

Facts index

Entity Attribute Value Confidence
技能认证特训营第二期报名链接https://www.qingsuyun.com/h5/e/217471/5/high
多品种金融数据高效导入丨DolphinDB 希施玛历史数据自动化导入模块介绍发布日期2025-04-03high
文章作者署名作者momohigh
DolphinDB提供的解决方案/模块CsmarData 模块(高效数据导入解决方案)high
CsmarData 模块实现方式通过结构化数据处理流水线实现多品种金融数据的高效导入;采用模块化设计,可存储复杂金融数据并支持量化投研基础数据medium
CsmarData 模块覆盖的核心数据源(股票)Level-2快照行情、逐笔委托、逐笔成交high
CsmarData 模块覆盖的核心数据源(期货期权)分笔数据、套利深度行情、分价成交量行情、委托统计行情、委托队列、静态数据high
希施玛数据导入前准备目录结构要求用户需自行解压希施玛数据;主目录下包含以日期命名的日期目录,每个日期目录下包含各市场所有数据源该日期的 csv 文件high
希施玛原始文件目录结构导入代码依赖性导入数据代码根据所示目录结构开发,用户需确保解压后目录结构保持一致high
市场代码对照上交所代码SSEhigh
市场代码对照深交所代码SZSEhigh
市场代码对照上期所代码SHFEhigh
市场代码对照上期能源代码INEhigh
市场代码对照大商所代码DCEhigh
市场代码对照广期所代码GFEXhigh
市场代码对照中金所代码CFFEXhigh
市场代码对照郑商所代码CZCEhigh
CsmarData 模块主要包含的部分数据表结构;数据库和分区表创建;数据导入high
股票数据支持范围Level-2快照行情覆盖市场上交所、深交所high
股票数据支持范围逐笔委托覆盖市场上交所、深交所high
股票数据支持范围逐笔成交覆盖市场上交所、深交所high
期货期权数据支持范围支持数据源与市场信息以图片表格形式给出(表 2-2)medium
_tbSchema_ 文件夹内容来源与用途根据第二章合并规则整理的数据结构;包含 csvSchema 与 dfsSchema 子文件夹high
csvSchema用途指定 DolphinDB 读取 csv 文件时的数据格式high
dfsSchema用途指定数据存入数据库的数据格式high
schema 子目录结构分类每个子文件夹下分为 stock 和 futures 子目录high
数据库和分区表创建模块包含文件_CreateDB.dos_ 与 _CreateTB.dos_high
_CreateDB.dos_用途创建存储希施玛数据的数据库high
_CreateTB.dos_用途创建存储希施玛数据的分布式表;具体表结构可参看 6.3 章节high
股票分区方案(沪深分开存储)存储引擎/分区/分区列/排序列TDSB;时间按天分区 + 证券代码 HASH 25 分区;TradingDate 和 Symbol;Symbol+ TradingTimehigh
股票分区方案(沪深合并存储)存储引擎/分区/分区列/排序列TDSB;时间按天分区 + 证券代码 HASH 50 分区;TradingDate 和 Symbol;Market+Symbol+ TradingTimehigh
期货期权-分笔数据分区方案存储方案/存储引擎/分区方案/分区列/排序列多市场、期货期权合并;TSDB;时间按天分区 + 证券代码 HASH 30;TradingDate 和 Symbol;Market+Symbol+ TradingTimehigh
期货-套利深度行情分区方案存储方案/存储引擎/分区方案/分区列/排序列多市场合并;TSDB;时间按天分区;TradingDate;Market+Symbol+ TradingTimehigh
期货期权-分价成交量行情分区方案存储方案/存储引擎/分区方案/分区列/排序列多市场、期货期权合并;TSDB;时间按天分区;TradingDate;Market+Symbol+ TradingTimhigh
期货期权-委托统计行情分区方案存储方案/存储引擎/分区方案/分区列/排序列多市场、期货期权合并;TSDB;时间按天分区;TradingDate;Market+Symbol+ TradingTimhigh
期货期权-委托队列分区方案存储方案/存储引擎/分区方案/分区列/排序列期货期权合并;TSDB;时间按天分区 + 证券代码 HASH 50;TradingDate 和 Symbol;Symbol+ TradingTimehigh
期货期权-静态数据分区方案存储方案/存储引擎/分区方案/分区列/排序列期货期权合并;OLAP;时间按年分区;TradingDate;/high
去重方案导入前处理每次导入前删除库内已有的对应日期数据(避免重复提交任务或重复导入)high
去重方案当天数据去重方法将当天市场数据读入内存,使用 isDuplicated([...], LAST) 去重后再导入数据库high
数据导入模块组成包含文件/文件夹_loadOneDayData_ 文件夹与 _LoadCsmarData.dos_high
_loadOneDayData_内容结构与用途包含 stock 与 futures 子目录;分别存放导入一天的股票与期货期权数据脚本;股票含沪深快照/逐笔委托/逐笔成交;期货期权含分笔/套利深度/委托统计/分价成交量/委托队列/静态数据high
_LoadCsmarData.dos_用途导入指定目录下的所有希施玛数据;整合前面所有模块;应用层面用户只需了解该模块主要函数high
autoLoadCsmarStockData函数签名autoLoadCsmarStockData(fileDir, dataSource, dbName="dfs://Csmar_Level2", tableName=NULL, market="ALL", startDate=NULL, endDate=NULL, parallel=1, initialDB=false, initialTB=false, isDataDuplicated=true)high
autoLoadCsmarStockDatafileDir 约束路径下第一级子目录必须为形如“20221201”的日期目录high
autoLoadCsmarStockDatadataSource 取值范围只能在 "Snapshot", "Entrust", "Trade" 三选一high
autoLoadCsmarStockData默认数据库名dfs://Csmar_Level2high
autoLoadCsmarStockData默认表名规则未指定 tableName 时默认表名为 "snapshot", "entrust", "trade"(随 dataSource)high
autoLoadCsmarStockDatamarket 取值范围与行为market 只能为 "ALL", "SZSE", "SSE";ALL 时沪深导入同一张 tableName 表;否则创建 tableName+market(如 snapshotSZSE)并只导入指定市场high
autoLoadCsmarStockData日期参数含义startDate/endDate 为字符串(如“20220101”“20221231”),包含边界;为 NULL 则不判断high
autoLoadCsmarStockDataparallel 含义并行度:控制后台提交的任务数目high
autoLoadCsmarStockDatainitialDB 行为若 dbName 数据库已存在:initialDB=true 删除并重建;否则保留并提示“[dbName] 数据库已经存在”high
autoLoadCsmarStockDatainitialTB 行为若 dbName 下已存在 tbName 表:initialTB=true 删除并重建;否则保留并提示“数据库 [dbName] 已经存在表 [tbName]”high
autoLoadCsmarStockData功能描述将 fileDir 下 startDate 到 endDate 日期的股票 dataSource 数据导入 dbName 数据库的 tableName 表high
autoLoadCsmarFuturesData函数签名autoLoadCsmarFuturesData(fileDir, dataSource, dbName=NULL, tbName=NULL, markets="ALL", startDate=NULL, endDate=NULL, parallel=1, initialDB=false, initialTB=false)high
autoLoadCsmarFuturesDatafileDir 约束路径下第一级子目录必须为形如“20221201”的日期目录high
autoLoadCsmarFuturesDatadataSource 取值范围支持 "TAQ"(十档行情), "Arbi"(套利深度行情), "MarchpriceQty"(分价成交量行情), "OrderStatistic"(委托统计行情), "OrderQueue"(委托队列), "BasicInfo"(静态数据)high
autoLoadCsmarFuturesData默认数据库名规则默认 "dfs://Csmar_Futures_" + dataSource;TAQ 默认 dfs://Csmar_Futures_TAQhigh
autoLoadCsmarFuturesData默认表名规则默认表名为 dataSource;TAQ 默认 tbName 为 "TAQ"high
autoLoadCsmarFuturesDatamarkets 参数行为不同数据源支持的市场不同(见文档开头表格);market 指定时只导入指定市场到 tableName 表;market="ALL" 时导入该数据源支持的所有市场到同一张 tableName 表;示例:TAQ market=["CZCE","DCE","INE"]high
autoLoadCsmarFuturesData功能描述将 fileDir 下 startDate 到 endDate 日期的期货期权 dataSource 数据导入 dbName 数据库的 tableName 表,默认期货期权数据合并high
getJobStatus功能描述查询后台任务中任务描述为 jobid 的任务状态high
getJobDetails功能描述输出后台任务中任务描述为 jobid 的中间信息high
模块同步位置目标目录DolphinDB 的 sever/modules 目录(原文拼写为 _sever/modules_)high
股票数据导入示例示例代码包含操作use DolphinDBModules::CsmarData::LoadCsmarData;login("admin","123456");设置 fileDir;调用 autoLoadCsmarStockData 导入 Snapshot/Entrust/Trade;使用 getJobStatus 查看状态high
期货期权数据导入示例示例代码包含操作use DolphinDBModules::CsmarData::LoadCsmarData;login("admin","123456");设置 fileDir;调用 autoLoadCsmarFuturesData 导入 TAQ/Arbi/MarchpriceQty/OrderStatistic/OrderQueue/BasicInfo;使用 getJobStatus 查看状态high
fileDir 查找日期目录规则查找逻辑从 fileDir 递归查找所有由8位数字组成的文件夹(如“20250221”),并将找到的日期与 startDate/endDate 做字符串比较以筛选导入日期;再在每个日期文件夹下递归查找所有 csv 文件获取绝对路径high
autoLoadCsmarStockData / autoLoadCsmarfuturesDatafileDir 必要条件fileDir 路径下必须有一层目录以8位日期命名(如“20250221”)high
导入单日数据的方式建议/约束导入一天数据需通过 startDate/endDate 控制导入日期,而不是通过 fileDir 参数high
数据源与市场字段设置文件查找依据模块会按数据源名称与市场名称查找对应目录中的数据文件,名称需填写正确high
期货期权分笔数据支持市场市场列表CZCE、DCE、INE、CFFEX、SHFE、GFEXhigh
markets="ALL" 的等价展开(期货期权分笔数据示例)等价市场数组["CZCE","DCE","INE","CFFEX","SHFE","GFEX"]high
CsmarData 模块设计目标专为处理 Level-2 高频数据设计;性能测试称内存占用率较理想并提供优化建议medium
性能测试环境OSCentOS Linux 7 (Core)high
性能测试环境内核版本3.10.0-1160.el7.x86_64high
性能测试环境CPUIntel(R) Xeon(R) Gold 5220R CPU @ 2.20GHzhigh
性能测试环境内存356Ghigh
性能测试环境磁盘4块 SSD,3.5 TB 固态硬盘 SATA 读取密集型 6 Gbps 512 2.5 英寸 Flex Bay AG 硬盘;1 DWPD;单盘测试随机写平均写入IO:266MB/shigh
股票导入性能(沪深合并存储)- snapshot性能指标数据量 103,278,591;数据天数 5;耗时 37(min);RPS 4.6(W/s);吞吐量 22.1(MB/s);原始csv 48.0(GB);单副本磁盘 9.3(GB);压缩比 5.2;并发数 5;最大内存占用 10.4(GB)high
股票导入性能(沪深合并存储)- entrust性能指标数据量 584,645,280;数据天数 5;耗时 36(min);RPS 27.7(W/s);吞吐量 67.6(MB/s);原始csv 142.6(GB);单副本磁盘 19.0(GB);压缩比 7.5;并发数 5;最大内存占用 9.9(GB)high
股票导入性能(沪深合并存储)- trade性能指标数据量 773,129,257;数据天数 5;耗时 58(min);RPS 22.2(W/s);吞吐量 30.6(MB/s);原始csv 104.0(GB);单副本磁盘 16.4(GB);压缩比 6.3;并发数 5;最大内存占用 10.7(GB)high
期货期权导入性能(多市场合并)- TAQ性能指标数据量 162,040,027;数据天数 5;市场 SHFE、DCE、INE、CFFEX;耗时 13(min);RPS 20.8(W/s);吞吐量 63.5(MB/s);原始csv 48.4(GB);单副本磁盘 7.6(GB);压缩比 6.37;并发数 5;最大内存占用 10.4(GB)high
期货期权导入性能(多市场合并)- OrderStatistic性能指标数据量 71,790,026;数据天数 5;市场 DCE;耗时 7(min);RPS 17.1(W/s);吞吐量 8.1(MB/s);原始csv 3.3(GB);单副本磁盘 1.3(GB);压缩比 2.54;并发数 5;最大内存占用 17.7(GB)high
吞吐量提升建议建议 1通过设置参数 parallel 增加后台导入任务数,提高并行度(注意内存资源使用)high
吞吐量提升建议建议 2使用读写性能更好的硬盘;由于一个标的一个csv文件需循环读取很多文件,瓶颈往往是磁盘,内存占用不大high
吞吐量提升建议建议 3数据分盘存储并从多个盘读取数据导入以提升吞吐量high
CsmarData 模块代码下载下载链接https://link.zhihu.com/?target=https%3A//docs.dolphindb.cn/zh/tutorials/script/csmardata/CsmarData.ziphigh
异常处理信息来源导入过程中问题会在日志中输出对应报错提示信息high
异常情况:创建数据库warning 输出条件与信息dbName 数据库已存在且 initialDB=false -> {"code":"warning","message":"[dbName] 数据库已经存在"}high
异常情况:创建分布式表warning 输出条件与信息tableName 表已存在且 initialDB=false -> {"code":"warning","message":"数据库 [dbName] 已经存在表 [tableName]"}high
异常情况:数据导入时无日期目录warning 输出条件与信息fileDir 下没有形如“20250221”的文件夹 -> {"code":"warning","message":"[fileDir] 路径下没有找到指定日期的文件夹,请确认文件路径"}high
异常情况:不支持的数据源error 输出条件与信息股票 dataSource 不在 Snapshot/Entrust/Trade 或期货期权 dataSource 不在 TAQ/Arbi/MarchpriceQty/OrderStatistic/OrderQueue/BasicInfo -> {"code":"error","message":"数据源 [dataSource] 暂时不支持"}high
异常情况:不支持的市场error 输出条件与信息股票 market 不属于 ALL/SSZ/SZSE 或期货期权 market 不在支持市场列表 -> {"code":"error","message":"市场 [market] 暂时不支持"}medium
异常情况:日期格式有误error 输出条件与信息startDate/endDate 不是 NULL 或不符合“20250221”格式 -> {"code":"error","message":"开始日期 [startDate] 格式有误"} 与 {"code":"error","message":"结束日期 [endDate] 格式有误"}high
异常情况:csv 列数不匹配error 输出条件与信息实际 csv 列数与 CsvSchema.dos 预设表结构列数不一致 -> {"code":"error","message":"[csvPath] 的数据格式有误,列数不匹配"}high
异常情况:日期目录下 csv 不全或不存在error 输出条件与信息示例输出:"深交所 [day] 日期的 [csvNames] 的 csv 文件不全或者不存在";"上交所 [day] 日期的 [csvNames] 的 csv 文件不全或者不存在" 等high
异常情况:其他错误捕获方式与输出通过 try{}catch(ex){} 捕获异常;输出报错信息 exhigh