DolphinDB 基准性能测试工具:金融模拟数据生成模块合集
测试 DolphinDB 数据库性能时,往往需要快速写入一些测试数据。为方便用户快速完成简单的基准性能测试,金融 Mock 数据生成模块覆盖了常用的金融数据集,满足用户生成模拟数据的需求。基于本模块生成的模拟数据不具有实际意义,建议仅作读写性能测试和基础功能体验使用。
本模块基于 DolphinDB 2.00.13 开发,请使用 2.00.13 及以上版本进行测试。
1. 环境配置
本教程的模块代码文件( MockData.dos )可在附录中获取,将 MockData.dos 文件移至节点的 [home]/modules 目录下即完成环境配置。其中 [home] 目录由系统配置参数 home 决定,可以通过 getHomeDir()
函数查看。
更多 DolphinDB 模块的说明,请参阅:DolphinDB 教程:模块。
2. 使用说明
通过 use 关键字导入模块。导入模块后,可以通过以下两种方式来使用模块内的自定义函数:
(1) 直接调用模块中的函数,生成1天10个股票的 Level-2 快照数据,一共有48020行:
use MockData
t = stockSnapshot(tradeDate=2020.01.06, securityNumber=10)
(2) 通过模块中的函数的完整路径来调用:
use MockData
t = MockData::stockSnapshot(tradeDate=2020.01.06, securityNumber=10)
若导入的不同模块中含有相同名称的函数,则必须通过第二种方式调用。
3. 模拟数据生成函数说明
本模块仅生成交易日的数据,当输入日期为非交易日时,会返回空数据表。交易日通过 DolphinDB 内置交易日历获取。由于存在多个交易所的交易日历,本文使用上交所的交易日历作为金融 Mock 数据生成模块的交易日。更多 DolphinDB 内置交易日历的说明,请参阅:交易日历。
模拟数据生成函数参考真实市场的交易量。对于每只标的,生成的一天数据量都相同,且生成的数据在一天中的交易时间段内均匀分布。生成的相关数值指标由随机数和固定值组成,不具备实际意义。具体数据量和说明如下表所示:
函数名 | 单日单标的数据量(行) | 说明 | 函数名 | 单日单标的数据量(行) | 说明 |
---|---|---|---|---|---|
stockSnapshot | 4,802 | 每 3 秒生成一只标的数据 | XBondTrade | 120 | 按固定数据量在交易时间内均匀分布,约 2 分钟生成一只标的数据 |
stockEntrust | 28,802 | 每 0.5 秒生成一只标的数据 | dailyFactor(单因子) | 1 | 每 1 天生成一只标的因子数据 |
stockTrade | 28,802 | 每 0.5 秒生成一只标的数据 | halfHourFactor(单因子) | 8 | 每 30 分钟生成一只标的因子数据 |
stockMinuteKLine | 242 | 每 1 分钟生成一只标的数据 | tenMinutesFactor(单因子) | 240 | 每 10 分钟生成一只标的因子数据 |
stockDailyKLine | 1 | 每 1 天生成一只标的数据 | minuteFactor(单因子) | 240 | 每 1 分钟生成一只标的因子数据 |
optionsSnapshot | 900 | 按固定数据量在交易时间内均匀分布,约 19 秒生成一只标的数据 | secondFactor(单因子) | 14,400 | 每 1 秒生成一只标的因子数据 |
futuresSnapshot | 2,000 | 按固定数据量在交易时间内均匀分布,约 9 秒生成一只标的数据 | level2Factor(单因子) | 4,800 | 每 3 秒生成一只标的因子数据 |
ESPDepth | 80 | 按固定数据量在交易时间内均匀分布,约 3 分钟生成一只标的数据 | tickFactor(单因子) | 28,800 | 每 0.5 秒生成一只标的因子数据 |
ESPTrade | 10 | 按固定数据量在交易时间内均匀分布,约 30 分钟生成一只标的数据 | futuresFactor(单因子) | 66,600 | 每 0.5 秒生成一只标的因子数据 |
XBondDepth | 1,000 | 按固定数据量在交易时间内均匀分布,约 17 秒生成一只标的数据 |
3.1 股票数据
股票数据主要有 Level-2 快照、逐笔委托以及逐笔成交等类型,可通过本模块中的函数生成这些数据。下面对数据生成模块的相关函数进行说明。
3.1.1 stockSnapshot
语法
stockSnapshot(tradeDate, securityNumber)
参数
- tradeDate:DATE 类型的标量,表示快照数据的日期。
- securityNumber:INT 类型的标量,表示股票标的数量。
详情
创建一天的 Level-2 快照模拟数据,并以表的数据形式返回。交易日期通过 tradeDate 指定,股票标的数量通过 securityNumber 指定。
例子
snapshotData = stockSnapshot(tradeDate=2020.01.06, securityNumber=10)
3.1.2 stockEntrust
stockEntrust(tradeDate, securityNumber)
参数
- tradeDate:DATE 类型的标量,表示逐笔委托数据的日期。
- securityNumber:INT 类型的标量,表示股票标的数量。
详情
创建一天的逐笔委托数据,并以表的数据形式返回。交易日期通过 tradeDate 指定,股票标的数量通过 securityNumber 指定。
例子
entrustData = stockEntrust(tradeDate=2020.01.06, securityNumber=10)
3.1.3 stockTrade
stockTrade(tradeDate, securityNumber)
参数
- tradeDate:DATE 类型的标量,表示逐笔成交数据的日期。
- securityNumber:INT 类型的标量,表示股票标的数量。
详情
创建一天的逐笔成交数据,并以表的数据形式返回。交易日期通过 tradeDate 指定,股票标的数量通过 securityNumber 指定。
例子
tradeData = stockTrade(tradeDate=2020.01.06, securityNumber=10)
3.1.4 stockMinuteKLine
stockMinuteKLine(startDate, endDate, securityNumber)
参数
- startDate:DATE 类型的标量,表示分钟 K 数据的起始日期。
- endDate:DATE 类型的标量,表示分钟 K 数据的结束日期。
- securityNumber:INT 类型的标量,表示股票标的数量。
详情
创建指定时间范围内分钟 K 线数据,并以表的数据形式返回。交易的起始日期通过 startDate 指定,交易的结束日期通过 endDate 指定,股票标的数量通过 securityNumber 指定。
例子
minuteKLineData = stockMinuteKLine(startDate=2020.09.05, endDate=2021.01.07, securityNumber=10)
3.1.5 stockDailyKLine
stockDailyKLine(startDate, endDate, securityNumber)
参数
- startDate:DATE 类型的标量,表示日 K 数据的起始日期。
- endDate:DATE 类型的标量,表示日 K 数据的结束日期。
- securityNumber:INT 类型的标量,表示股票标的数量。
详情
创建指定时间范围内的日 K 线数据,并以表的数据形式返回。交易的起始日期通过 startDate 指定,交易的结束日期通过 endDate 指定,股票标的数量通过 securityNumber 指定。
例子
dailyKLineData = stockDailyKLine(startDate=2015.01.01, endDate=2021.01.30, securityNumber=1000)
3.2 期权数据
3.2.1 optionsSnapshot
optionsSnapshot(tradeDate, instrumentNumber)
参数
- tradeDate:DATE 类型的标量,表示期权数据的日期。
- instrumentNumber:INT 类型的标量,表示期权合约数量。
详情
创建一个单日的期权快照数据,并以表的数据形式返回。交易日期通过 tradeDate 指定,期权标的数量通过 instrumentNumber 指定。
例子
optionsSnapshotData = optionsSnapshot(tradeDate=2020.01.06, instrumentNumber=14000)
3.3 期货数据
3.3.1 futuresSnapshot
futuresSnapshot(tradeDate, instrumentNumber)
参数
- tradeDate:DATE 类型的标量,表示期货数据的日期。
- instrumentNumber:INT 类型的标量,表示期货合约数量。
详情
创建一个单日的期货数据,并以表的数据形式返回。交易日期通过 tradeDate 指定,期权标的数量通过 instrumentNumber 指定。
例子
FuturesData = futuresSnapshot(tradeDate=2020.06.01, instrumentNumber=2000)
3.4 银行间债券数据
银行间债券数据有 ESP 报价、ESP 成交、XBond 报价、XBond 成交类型,可通过本模块中的函数生成这些数据。下面对数据生成模块的相关函数进行说明。
3.4.1 ESPDepth
ESPDepth(tradeDate, securityNumber)
参数
- tradeDate:DATE 类型的标量,表示银行间债券 ESP 报价数据的日期。
- securityNumber:INT 类型的标量,表示银行间债券 ESP 标的数量。
详情
创建一个单日的银行间债券 ESP 报价数据,并以表的数据形式返回。交易日期通过 tradeDate 指定,银行间债券 ESP 标的数量通过 securityNumber 指定。
例子
ESPDepthData = ESPDepth(tradeDate=2020.06.01, securityNumber=4000)
3.4.2 ESPTrade
ESPTrade(tradeDate, securityNumber)
参数
- tradeDate:DATE 类型的标量,表示银行间债券 ESP 成交数据的日期。
- securityNumber:INT 类型的标量,表示银行间债券 ESP 标的数量。
详情
创建一个单日的银行间债券 ESP 成交数据,并以表的数据形式返回。交易日期通过 tradeDate 指定,银行间债券 ESP 标的数量通过 securityNumber 指定。
例子
ESPTradeData = ESPTrade(tradeDate=2020.06.01, securityNumber=3000)
3.4.3 XBondDepth
XBondDepth(tradeDate, securityNumber)
参数
- tradeDate:DATE 类型的标量,表示银行间债券 XBond 报价数据的日期。
- securityNumber:INT 类型的标量,表示银行间债券 XBond 标的数量。
详情
创建一个单日的银行间债券 XBond 报价数据,并以表的数据形式返回。交易日期通过 tradeDate 指定,银行间债券 XBond 标的数量通过 securityNumber 指定。
例子
XBondDepthData = XBondDepth(tradeDate=2020.06.01, securityNumber=200)
3.4.4 XBondTrade
XBondTrade(tradeDate, securityNumber)
参数
- tradeDate:DATE 类型的标量,表示银行间债券 XBond 成交数据的日期。
- securityNumber:INT 类型的标量,表示银行间债券 XBond 标的数量。
详情
创建一个单日的银行间债券 XBond 成交数据,并以表的数据形式返回。交易日期通过 tradeDate 指定,银行间债券 XBond 标的数量通过 securityNumber 指定。
例子
XBondTradeData = XBondTrade(tradeDate=2020.06.01, securityNumber=200)
3.5 因子库数据
因子库数据有各种频率因子数据类型,可通过本模块中的函数生成这些数据。下面对数据生成模块的相关函数进行说明。
3.5.1 dailyFactor
dailyFactor(startDate, endDate, securityNumber, factorNumber)
参数
- startDate:DATE 类型的标量,表示因子数据的起始日期。
- endDate:DATE 类型的标量,表示因子数据的结束日期。
- securityNumber:INT 类型的标量,表示股票标的数量。
- factorNumber:INT 类型的标量,表示因子数量。
详情
创建指定时间范围内的日频因子数据,并以表的数据形式返回。起始日期通过 startDate 指定,结束日期通过 endDate 指定,股票标的数量通过 securityNumber 指定,因子数量通过 factorNumber 指定。
例子
dailyFactorData = dailyFactor(startDate=2016.01.01,endDate=2021.12.31,securityNumber=500, factorNumber=100)
上述代码会生成一个大小约为1.8GB,变量名为 dailyFactorData 的内存表。
3.5.2 halfHourFactor
halfHourFactor(startDate, endDate, securityNumber, factorNumber)
参数
- startDate:DATE 类型的标量,表示因子数据的起始日期。
- endDate:DATE 类型的标量,表示因子数据的结束日期。
- securityNumber:INT 类型的标量,表示股票标的数量。
- factorNumber:INT 类型的标量,表示因子数量。
详情
创建指定时间范围内的半小时频因子数据,并以表的数据形式返回。起始日期通过 startDate 指定,结束日期通过 endDate 指定,股票标的数量通过 securityNumber 指定,因子数量通过 factorNumber 指定。
例子
halfHourFactorData = halfHourFactor(startDate=2021.06.01,endDate=2021.12.31,securityNumber=500, factorNumber=100)
上述代码会生成一个大小约为1.7GB,变量名为 halfHourFactorData 的内存表。
3.5.3 tenMinutesFactor
tenMinutesFactor(startDate, endDate, securityNumber, factorNumber)
参数
- startDate:DATE 类型的标量,表示因子数据的起始日期。
- endDate:DATE 类型的标量,表示因子数据的结束日期。
- securityNumber:INT 类型的标量,表示股票标的数量。
- factorNumber:INT 类型的标量,表示因子数量。
详情
创建指定时间范围内的十分钟频因子数据,并以表的数据形式返回。起始日期通过 startDate 指定,结束日期通过 endDate 指定,股票标的数量通过 securityNumber 指定,因子数量通过 factorNumber 指定。
例子
tenMinutesFactorData = tenMinutesFactor(startDate=2021.09.01,endDate=2021.12.31,securityNumber=500, factorNumber=100)
上述代码会生成一个大小约为2.2GB,变量名为 tenMinutesFactorData 的内存表。
3.5.4 minuteFactor
minuteFactor(startDate, endDate, securityNumber, factorNumber)
参数
- startDate:DATE 类型的标量,表示因子数据的起始日期。
- endDate:DATE 类型的标量,表示因子数据的结束日期。
- securityNumber:INT 类型的标量,表示股票标的数量。
- factorNumber:INT 类型的标量,表示因子数量。
详情
创建指定时间范围内的分钟频因子数据,并以表的数据形式返回。起始日期通过 startDate 指定,结束日期通过 endDate 指定,股票标的数量通过 securityNumber 指定,因子数量通过 factorNumber 指定。
例子
minuteFactorData = minuteFactor(startDate=2021.12.01,endDate=2021.12.31,securityNumber=100, factorNumber=100)minuteFactor
上述代码会生成一个大小约为1.5GB,变量名为 minuteFactorData 的内存表。
3.5.5 secondFactor
secondFactor(startDate, endDate, securityNumber, factorNumber)
参数
- startDate:DATE 类型的标量,表示因子数据的起始日期。
- endDate:DATE 类型的标量,表示因子数据的结束日期。
- securityNumber:INT 类型的标量,表示股票标的数量。
- factorNumber:INT 类型的标量,表示因子数量。
详情
创建指定时间范围内的秒钟频因子数据,并以表的数据形式返回。起始日期通过 startDate 指定,结束日期通过 endDate 指定,股票标的数量通过 securityNumber 指定,因子数量通过 factorNumber 指定。
例子
secondFactorData = secondFactor(startDate=2021.12.15, endDate=2021.12.31, securityNumber=50, factorNumber=10)
上述代码会生成一个大小约为2.6GB,变量名为 secondFactorData 的内存表。
3.5.6 level2Factor
level2Factor(startDate, endDate, securityNumber, factorNumber)
参数
- startDate:DATE 类型的标量,表示因子数据的起始日期。
- endDate:DATE 类型的标量,表示因子数据的结束日期。
- securityNumber:INT 类型的标量,表示股票标的数量。
- factorNumber:INT 类型的标量,表示因子数量。
详情
创建指定时间范围内的 Level-2 快照频因子数据,并以表的数据形式返回。起始日期通过 startDate 指定,结束日期通过 endDate 指定,股票标的数量通过 securityNumber 指定,因子数量通过 factorNumber 指定。
例子
level2FactorData = level2Factor(startDate=2021.12.01,endDate=2021.12.31,securityNumber=50, factorNumber=10)
上述代码会生成一个大小约为1.5GB,变量名为 level2FactorData 的内存表。
3.5.7 tickFactor
tickFactor(startDate, endDate, securityNumber, factorNumber)
参数
- startDate:DATE 类型的标量,表示因子数据的起始日期。
- endDate:DATE 类型的标量,表示因子数据的结束日期。
- securityNumber:INT 类型的标量,表示股票标的数量。
- factorNumber:INT 类型的标量,表示因子数量。
详情
创建指定时间范围内的逐笔频因子数据,并以表的数据形式返回。起始日期通过 startDate 指定,结束日期通过 endDate 指定,股票标的数量通过 securityNumber 指定,因子数量通过 factorNumber 指定。
例子
tickFactorData = tickFactor(startDate=2021.12.01,endDate=2021.12.31,securityNumber=50, factorNumber=10)
上述代码会生成一个大小约为8.6GB,变量名为 tickFactorData 的内存表。
3.5.8 futuresFactor
futuresFactor(startDate, endDate, securityNumber, factorNumber)
参数
- startDate:DATE 类型的标量,表示因子数据的起始日期。
- endDate:DATE 类型的标量,表示因子数据的结束日期。
- securityNumber:INT 类型的标量,表示股票标的数量。
- factorNumber:INT 类型的标量,表示因子数量。
详情
创建指定时间范围内的期货500ms频因子数据,并以表的数据形式返回。起始日期通过 startDate 指定,结束日期通过 endDate 指定,股票标的数量通过 securityNumber 指定,因子数量通过 factorNumber 指定。
例子
futuresFactorData = futuresFactor(startDate=2021.12.15,endDate=2021.12.31,securityNumber=50, factorNumber=10)
上述代码会生成一个大小约为10.6GB,变量名为 futuresFactorData 的内存表。
4. 库表生成函数说明
由于不同类型的金融数据具有不同的表结构,自行创建这些库表会非常繁琐。在该模块中,我们将提供针对不同数据类型的库表创建函数,以便用户更轻松地创建所需的库表。本模块的建库建表代码参考自 best_practices_for_partitioned_storage.md · 浙江智臾科技有限公司/Tutorials_CN - Gitee.com
4.1 股票数据
4.1.1 stockSnapShotPT
stockSnapShotPT(dbName, tbName)
参数
- dbName:STRING 类型的标量,表示存储快照数据的数据库名。
- tbName:STRING 类型的标量,表示存储快照数据的数据表名。
详情
创建存储快照数据的数据库表,并返回数据表的句柄。数据库名通过 dbName 指定,数据表名通过 tbName 指定。
例子
t = stockSnapShotPT("dfs://merge_TB", "merge_snapshotTB")
4.1.2 stockEntrustPT
stockEntrustPT(dbName, tbName)
参数
- dbName:STRING 类型的标量,表示存储逐笔委托数据的数据库名。
- tbName:STRING 类型的标量,表示存储逐笔委托数据的数据表名。
详情
创建存储逐笔委托数据的数据库表,并返回数据表的句柄。数据库名通过 dbName 指定,数据表名通过 tbName 指定。
例子
t = stockEntrustPT("dfs://merge_TB", "merge_entrustTB")
4.1.3 stockTradePT
stockTradePT(dbName, tbName)
参数
- dbName:STRING 类型的标量,表示存储逐笔成交数据的数据库名。
- tbName:STRING 类型的标量,表示存储逐笔成交数据的数据表名。
详情
创建存储逐笔成交数据的数据库表,并返回数据表的句柄。数据库名通过 dbName 指定,数据表名通过 tbName 指定。
例子
t = stockTradePT("dfs://merge_TB", "merge_tradeTB")
4.1.4 stockMinuteKLinePT
stockMinuteKLinePT(dbName, tbName)
参数
- dbName:STRING 类型的标量,表示存储分钟 K 数据的数据库名。
- tbName:STRING 类型的标量,表示存储分钟 K 数据的数据表名。
详情
创建存储分钟K数据的数据库表,并返回数据表的句柄。数据库名通过 dbName 指定,数据表名通过 tbName 指定。
例子
t = stockMinuteKLinePT("dfs://k_minute_level", "k_minute")
4.1.5 stockDailyKLinePT
stockDailyKLinePT(dbName, tbName)
参数
- dbName:STRING 类型的标量,表示存储日 K 数据的数据库名。
- tbName:STRING 类型的标量,表示存储日 K 数据的数据表名。
详情
创建存储日 K 数据的数据库表,并返回数据表的句柄。数据库名通过 dbName 指定,数据表名通过 tbName 指定。
例子
t = stockDailyKLinePT("dfs://k_day_level", "k_day")
4.2 期货数据
4.2.1 futuresPT
futuresPT(dbName, tbName)
参数
- dbName:STRING 类型的标量,表示存储期货数据的数据库名。
- tbName:STRING 类型的标量,表示存储期货数据的数据表名。
详情
创建存储期货数据的数据库表,并返回数据表的句柄。数据库名通过 dbName 指定,数据表名通过 tbName 指定。
例子
t = futuresPT("dfs://ctp_futures", "futures")
4.3 期权数据
4.3.1 optionsPT
optionsPT(dbName, tbName)
参数
- dbName:STRING 类型的标量,表示存储期权数据的数据库名。
- tbName:STRING 类型的标量,表示存储期权数据的数据表名。
详情
创建存储期权数据的数据库表,并返回数据表的句柄。数据库名通过 dbName 指定,数据表名通过 tbName 指定。
例子
t = optionsPT("dfs://ctp_options", "options")
4.4 银行间债券
4.4.1 ESPDepthPT
ESPDepthPT(dbName, tbName)
参数
- dbName:STRING 类型的标量,表示存储银行间债券 ES P报价数据的数据库名。
- tbName:STRING 类型的标量,表示存储银行间债券 ESP 报价数据的数据表名。
详情
创建银行间债券ESP报价数据的数据库表,并返回数据表的句柄。数据库名通过 dbName 指定,数据表名通过 tbName 指定。
例子
t = ESPDepthPT("dfs://ESPDepth", "ESPDepthtable")
4.4.2 ESPTradePT
ESPTradePT(dbName, tbName)
参数
- dbName:STRING 类型的标量,表示存储银行间债券 ESP 成交数据的数据库名。
- tbName:STRING 类型的标量,表示存储银行间债券 ESP 成交数据的数据表名。
详情
创建银行间债券ESP成交数据的数据库表,并返回数据表的句柄。数据库名通过 dbName 指定,数据表名通过 tbName 指定。
例子
t = ESPTradePT("dfs://ESPTrade", "ESPTradetable")
4.4.3 XBondDepthPT
XBondDepthPT(dbName, tbName)
参数
- dbName:STRING 类型的标量,表示存储银行间债券 XBond 报价数据的数据库名。
- tbName:STRING 类型的标量,表示存储银行间债券 XBond 报价数据的数据表名。
详情
创建银行间债券XBond报价数据的数据库表,并返回数据表的句柄。数据库名通过 dbName 指定,数据表名通过 tbName 指定。
例子
t = XBondDepthPT("dfs://XBondDepth", "XBondDepthtable")
4.4.4 XBondTradePT
XBondTradePT(dbName, tbName)
参数
- dbName:STRING 类型的标量,表示存储银行间债券 XBond 成交数据的数据库名。
- tbName:STRING 类型的标量,表示存储银行间债券 XBond 成交数据的数据表名。
详情
创建银行间债券 XBond 成交数据的数据库表,并返回数据表的句柄。数据库名通过 dbName 指定,数据表名通过 tbName 指定。
例子
t = XBondTradePT("dfs://XBondTrade", "XBondTradetable")
4.5 因子库数据
4.5.1 dailyFactorPT
dailyFactorPT(dbName, tbName)
参数
- dbName:STRING 类型的标量,表示存储日频因子数据的数据库名。
- tbName:STRING 类型的标量,表示存储日频因子数据的数据表名。
详情
创建日频因子数据的数据库表,并返回数据表的句柄。数据库名通过 dbName 指定,数据表名通过 tbName 指定。
例子
t = dailyFactorPT("dfs://dayFactorDB", "dayFactorTB")
4.5.2 halfHourFactorPT
halfHourFactorPT(dbName, tbName)
参数
- dbName:STRING 类型的标量,表示存储半小时频因子数据的数据库名。
- tbName:STRING 类型的标量,表示存储半小时频因子数据的数据表名。
详情
创建半小时频因子数据的数据库表,并返回数据表的句柄。数据库名通过 dbName 指定,数据表名通过 tbName 指定。
例子
t = halfHourFactorPT("dfs://halfhourFactorDB", "halfhourFactorTB")
4.5.3 tenMinutesFactorPT
tenMinutesFactorPT(dbName, tbName)
参数
- dbName:STRING 类型的标量,表示存储十分钟频因子数据的数据库名。
- tbName:STRING 类型的标量,表示存储十分钟频因子数据的数据表名。
详情
创建十分钟频因子数据的数据库表,并返回数据表的句柄。数据库名通过 dbName 指定,数据表名通过 tbName 指定。
例子
t = tenMinutesFactorPT("dfs://tenMinutesFactorDB", "tenMinutesFactorTB")
4.5.4 minuteFactorPT
minuteFactorPT(dbName, tbName)
参数
- dbName:STRING 类型的标量,表示存储分钟频因子数据的数据库名。
- tbName:STRING 类型的标量,表示存储分钟频因子数据的数据表名。
详情
创建分钟频因子数据的数据库表,并返回数据表的句柄。数据库名通过 dbName 指定,数据表名通过 tbName 指定。
例子
t = minuteFactorPT("dfs://minuteFactorDB", "minuteFactorTB")
4.5.5 secondFactorPT
secondFactorPT(dbName, tbName)
参数
- dbName:STRING 类型的标量,表示存储秒钟频因子数据的数据库名。
- tbName:STRING 类型的标量,表示存储秒钟频因子数据的数据表名。
详情
创建秒钟频因子数据的数据库表,并返回数据表的句柄。数据库名通过 dbName 指定,数据表名通过 tbName 指定。
例子
t = secondFactorPT("dfs://secondFactorDB", "secondFactorTB")
4.5.6 level2FactorPT
level2FactorPT(dbName, tbName)
参数
- dbName:STRING 类型的标量,表示存储Level-2 快照频因子数据的数据库名。
- tbName:STRING 类型的标量,表示存储Level-2 快照频因子数据的数据表名。
详情
创建Level-2 快照频因子数据的数据库表,并返回数据表的句柄。数据库名通过 dbName 指定,数据表名通过 tbName 指定。
例子
t = level2FactorPT("dfs://level2FactorDB", "level2FactorTB")
4.5.7 tickFactorPT
tickFactorPT(dbName, tbName)
参数
- dbName:STRING 类型的标量,表示存储逐笔频因子数据的数据库名。
- tbName:STRING 类型的标量,表示存储逐笔频因子数据的数据表名。
详情
创建逐笔频因子数据的数据库表,并返回数据表的句柄。数据库名通过 dbName 指定,数据表名通过 tbName 指定。
例子
t = tickFactorPT("dfs://tickFactorDB", "tickFactorTB")
4.5.8 futuresFactorPT
futuresFactorPT(dbName, tbName)
参数
- dbName:STRING 类型的标量,表示存储期货500ms频因子数据的数据库名。
- tbName:STRING 类型的标量,表示存储期货500ms频因子数据的数据表名。
详情
创建期货500ms频因子数据的数据库表,并返回数据表的句柄。数据库名通过 dbName 指定,数据表名通过 tbName 指定。
例子
t = futuresFactorPT("dfs://futuresFactorDB", "futuresFactorTB")
5. 应用示例
用户可以将第 3 节中生成的模拟数据,存入第 4 节所创建的数据库表,以 Level2 快照行情为例,代码如下:
use MockDatasnapshotData = stockSnapshot(tradeDate=2020.01.06, securityNumber=10)
t = snapShotPT("dfs://merge_TB", "merge_snapshotTB")
t.append!(snapshotData)
相应的金融数据可存入对应数据库表,Mock 数据生成函数与数据库表创建函数的对应关系如下:
数据生成函数 | 数据库表创建函数 | |
---|---|---|
1 | stockSnapshot | stockSnapShotPT |
2 | stockEntrust | stockEntrustPT |
3 | stockTrade | stockTradePT |
4 | stockMinuteKLine | stockMinuteKLinePT |
5 | stockDailyKLine | stockDailyKLinePT |
6 | optionsSnapshot | optionsPT |
7 | futuresSnapshot | futuresPT |
8 | ESPDepth | ESPDepthPT |
9 | ESPTrade | ESPTradePT |
10 | XBondDepth | XBondDepthPT |
11 | XBondTrade | XBondTradePT |
12 | dailyFactor | dailyFactorPT |
13 | halfHourFactor | halfHourFactorPT |
14 | tenMinutesFactor | tenMinutesFactorPT |
15 | minuteFactor | minuteFactorPT |
16 | secondFactor | secondFactorPT |
17 | level2Factor | level2FactorPT |
18 | tickFactor | tickFactorPT |
19 | futuresFactor | futuresFactorPT |
6. 常见问题
6.1 创建数据库表时报错:CacheEngineOOM
执行数据插入数据库表的代码后可能会出现 CacheEngineOOM 的问题,示例代码如下:
minuteKLineData = genStockMinuteKLine(startDate=2020.01.01, endDate=2020.06.30, securityNumber=2000)
t = createMinuteKLineTable("dfs://MinuteK", "MinuteK")
t.append!(minuteKLineData)
报出如下错误:
::append!(t, minuteKLineData) => [appendDFSTablet] parallel execution of save table failed with error msg: ChunkCacheEngine is out of memory, possibly due to a transaction that tries to write data larger than the available memory.
解决方法:
- 方法一:减小一次写入的数据量。
- 方法二:增大 CacheEngine 的大小。可以调用 setOLAPCacheEngineSize 在线增大 OLAP Cache Engine 的容量,需要注意同时修改配置项 OLAPCacheEngineSize,否则重启后在线修改的容量会失效。
6.2 查询数据库时报错:The query is too large
执行查询数据库表的代码后可能会出现查询分区数量过多的问题,示例代码如下:
temp = select top 100 * from loadTable(db_path, tb_name)
报出如下错误:
The number of partitions [880900] relevant to the query is too large. Please add more specific filtering conditions on partition columns in WHERE clause, or consider changing the value of the configuration parameter maxPartitionNumPerQuery.
解决方法:
- 方法一:查询时通过 WHERE 语句减少查询涉及的分区数量。
- 方法二:增大单个查询语句可查找的最大分区数,系统默认值是 65536,可以通过参数 maxPartitionNumPerQuery 进行配置并在重启后生效。
6.3 模拟数据生成返回0行记录
成功执行模拟数据生成函数后,返回的结果表里仅有0行记录,示例代码如下:
snapshotData = stockSnapshot(tradeDate=2020.01.05, securityNumber=10)
select * from snapshotData
2020.01.05 为非交易日。本模块仅生成交易日的数据,当输入日期为非交易日时,会返回空数据表。交易日通过交易日历进行获取,且默认使用上交所交易日历。
解决方法:
- tradeDate 填入真实的交易日。
6.4 创建分布式数据库表时报错
执行创建数据库表的代码后可能会出现无法写入一个已经存在的数据库的问题,示例代码如下:
t = ESPDepthPT("dfs://merge_TB", "merge_TB")
报出如下错误:
MockData::ESPDepthPT: db = database(newdbName, VALUE, 2022.06.01 .. 2023.01.01, , "TSDB") => It is not allowed to overwrite an existing database.
解决方法:
建议使用其他名字或者删掉该数据库再创建该数据库表。
删除指定数据库的代码如下:
dropDatabase("dfs://merge_TB")
检查指定数据库是否存在的代码如下:
existsDatabase("dfs://merge_TB")
附录
MockData
相关文章:
DolphinDB 基准性能测试工具:金融模拟数据生成模块合集
测试 DolphinDB 数据库性能时,往往需要快速写入一些测试数据。为方便用户快速完成简单的基准性能测试,金融 Mock 数据生成模块覆盖了常用的金融数据集,满足用户生成模拟数据的需求。基于本模块生成的模拟数据不具有实际意义,建议仅…...

BUUCTF—[BJDCTF2020]The mystery of ip
题解 打开环境点击上面的flag可以看到这个IP页面。 抓个包看看有啥东西无,可以看到在返回包有IP。 看到IP就想到X-Forwarded-For这个玩意,我们用X-Forwarded-For随便添加个IP看看。可以看到返回的IP内容变成了123。 X-Forwarded-For:123 推测它会输出我…...

leecode100题-双指针-三数之和
给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 答案中不可以包含重复的三元组。 示例 1: 输入…...

计算机毕业设计PySpark+Django考研分数线预测 考研院校推荐系统 考研推荐系统 考研爬虫 考研大数据 Hadoop 大数据毕设 机器学习 深度学习
《PySparkDjango考研分数线预测与推荐系统》开题报告 一、研究背景与意义 随着教育水平的提高和就业竞争的加剧,越来越多的学生选择继续深造,参加研究生入学考试(考研)。然而,考研信息繁杂,选择专业和院校…...
Go语言多态实践以及gin框架c.BindJSON序列化遇到的坑
遇到的问题 如果定义的接收结构体字段是interface{},在调用gin的 c.BindJSON 方法后会直接转为map, 导致无法断言为其他类型 场景 在创建工程请求中,根据工程类别的不同会有多种创建参数,比如 // A 类型需要编译 所以有这些字…...

SpringCloud神领物流学习笔记:项目概述(一)
SpringCloud神领物流学习笔记:项目概述(一) 文章目录 SpringCloud神领物流学习笔记:项目概述(一)1、项目介绍2、基本业务流程3、系统架构4、技术架构 1、项目介绍 神领物流是一个基于微服务架构体系的【…...

RocketMQ异步报错:No route info of this topic
在SpringBoot中发送RocketMQ异步消息的时候报错了,提示org.apache.rocketmq.client.exception.MQClientException: No route info of this topic, testTopic1 这里给出具体的解决方案 一、Broker模块不支持自动创建topic,并且topic没有被手动创建过 R…...

Node.js学习记录(一)
目录 一、文件读取 readFile 二、写入文件 writeFile 三、动态路径 __dirname:表示当前文件所处的目录、path.join 四、获取路径文件名 path.basename 五、提取某文件中的css、JS、html 六、http 七、启动创建web服务器 服务器响应 八、将资源请求的 url 地…...

【AI】Pytorch_模型构建
建议点赞收藏关注!持续更新至pytorch大部分内容更完。 本文已达到10w字,故按模块拆开,详见目录导航。 整体框架如下 数据及预处理 模型及其构建 损失函数及优化器 本节目录 模型线性回归逻辑回归LeNetAlexNet 构建模块组织复杂网络初始化网络…...
FFmpeg源码:avcodec_descriptor_get函数分析
一、avcodec_descriptor_get函数的声明 avcodec_descriptor_get函数声明在FFmpeg源码(本文演示用的FFmpeg源码版本为7.0.1)的头文件libavcodec/codec_desc.h中: /*** return descriptor for given codec ID or NULL if no descriptor exist…...

为数据仓库构建Zero-ETL无缝集成数据分析方案(下篇)
对于从事数据分析的小伙伴们来说,最头疼的莫过于数据处理的阶段。在我们将数据源的原始数据导入数据仓储进行分析之前,我们通常需要进行ETL流程对数据格式进行统一转换,这个流程需要分配专业数据工程师基于业务情况完成,整个过程十…...
ElMessageBox消息确认框组件在使用时如何设置第三个或多个自定义按钮
ElMessageBox自带两个按钮一个确认一个取消,当还想使用该组件还想再加个功能组件时,就需要自定义个按钮加到组件里 第二种方法可以通过编写自定义弹窗来完成,个人觉得代码量增多过于繁琐,当然也可以实现 先定义方法负责获取dom父节点,创建新的子元素加…...

javaWeb【day04】--(MavenSpringBootWeb入门)
01. Maven课程介绍 1.1 课程安排 学习完前端Web开发技术后,我们即将开始学习后端Web开发技术。做为一名Java开发工程师,后端Web开发技术是我们学习的重点。 1.2 初识Maven 1.2.1 什么是Maven Maven是Apache旗下的一个开源项目,是一款用于…...

[Linux]:文件(下)
✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:Linux学习 贝蒂的主页:Betty’s blog 1. 重定向原理 在明确了文件描述符的概念及其分配规则后,我们就可…...

【学习笔记】手写Tomcat 一
目录 HTTP协议请求格式 HTTP协议响应格式 Socket 解读代码 服务端优化 解读代码 作业 1. 响应一个 HTML 页面给客户端,游览器把接收到的内容进行渲染 2. 文件的媒体类型是写死的,肯定不行,怎么变成动态? 昨天作业答案 …...
springboot基础-Druid数据库连接池使用
文章目录 引入Druid组件(maven)配置数据源Druid配置项1. 数据源配置2. 监控配置3. 安全配置4. SQL拦截配置 示例配置相关地址 Druid是阿里巴巴开源的一个高性能的Java数据库连接池组件,它提供了强大的监控统计功能和工具支持。Druid不仅可以作…...
C语言文件操作全攻略:从打开fopen到读写r,w,一网打尽
前言 在C语言中,文件操作是一项基础而强大的功能,它允许程序与存储在硬盘上的数据进行交互。无论是读取配置文件、处理日志文件,还是创建新的数据文件,C语言都提供了丰富的函数库来支持这些操作。本文将整合并详细介绍fopen(), 对…...
【0328】Postgres内核之 “User ID state”
1. User ID state 我们必须追踪与“用户ID(user ID)”概念相关的多个不同值。Postgres内核中有共有以下几个 User ID。 ✔ AuthenticatedUserId ✔ SessionUserId ✔ OuterUserId ✔ CurrentUserId 1.1 User ID 概念相关的不同值 AuthenticatedUserId AuthenticatedUserId…...

VisualStudio环境搭建C++
Visual Studio环境搭建 说明 C程序编写中,经常需要链接头文件(.h/.hpp)和源文件(.c/.cpp)。这样的好处是:控制主文件的篇幅,让代码架构更加清晰。一般来说头文件里放的是类的申明,函数的申明,全局变量的定义等等。源…...
linux 文件压缩并且切割压缩
Linux系统中,split命令是一个非常实用的工具,它可以将一个大文件分割成多个小文件 1、先将文件压缩 tar -cvf access.log.tar.gz access2、将文件压缩为每500mb一个文件,-b 500m 指定了每个分割文件的大小为500MB,-d 表示使用数字…...

css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...

论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...

手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...

二维数组 行列混淆区分 js
二维数组定义 行 row:是“横着的一整行” 列 column:是“竖着的一整列” 在 JavaScript 里访问二维数组 grid[i][j] 表示 第i行第j列的元素 let grid [[1, 2, 3], // 第0行[4, 5, 6], // 第1行[7, 8, 9] // 第2行 ];// grid[i][j] 表示 第i行第j列的…...

开疆智能Ethernet/IP转Modbus网关连接鸣志步进电机驱动器配置案例
在工业自动化控制系统中,常常会遇到不同品牌和通信协议的设备需要协同工作的情况。本案例中,客户现场采用了 罗克韦尔PLC,但需要控制的变频器仅支持 ModbusRTU 协议。为了实现PLC 对变频器的有效控制与监控,引入了开疆智能Etherne…...
EC2安装WebRTC sdk-c环境、构建、编译
1、登录新的ec2实例,证书可以跟之前的实例用一个: ssh -v -i ~/Documents/cert/qa.pem ec2-user70.xxx.165.xxx 2、按照sdk-c demo中readme的描述开始安装环境: https://github.com/awslabs/amazon-kinesis-video-streams-webrtc-sdk-c 2…...