---
source_url: https://docs.dolphindb.cn/zh/tutorials/financial_mock_data_generation_module.html
fetched_at: 2026-05-19T09:50:11Z
category: tutorials
title: 金融 Mock 数据生成模块
sha1: 7b38b7df708907d165fb4fa1182a94975f03ba16
---

# 金融 Mock 数据生成模块

测试 DolphinDB 数据库性能时，往往需要快速写入一些测试数据。为方便用户快速完成简单的基准性能测试，金融 Mock 数据生成模块覆盖了常用的金融数据集，满足用户生成模拟数据的需求。基于本模块生成的模拟数据不具有实际意义，建议仅作读写性能测试和基础功能体验使用。

本模块基于 DolphinDB 2.00.13 开发，请使用 2.00.13 及以上版本进行测试。

## **1. 环境配置**

本教程的模块代码文件（ MockData.dos ）可在附录中获取，将 MockData.dos 文件移至节点的 [home]/modules 目录下即完成环境配置。其中 [home] 目录由系统配置参数 *home* 决定，可以通过 `getHomeDir()` 函数查看。

更多 DolphinDB 模块的说明，请参阅：[DolphinDB 教程：模块](tu_modules.html)。

## **2. 使用说明**

通过 use 关键字导入模块。导入模块后，可以通过以下两种方式来使用模块内的自定义函数：

(1) 直接调用模块中的函数，生成1天10个股票的 Level-2 快照数据，一共有48020行：

```dolphindb
use MockData
t = stockSnapshot(tradeDate=2020.01.06, securityNumber=10)
```

(2) 通过模块中的函数的完整路径来调用：

```dolphindb
use MockData
t = MockData::stockSnapshot(tradeDate=2020.01.06, securityNumber=10)
```

**若导入的不同模块中含有相同名称的函数，则必须通过第二种方式调用。**

## 3. 模拟数据生成函数说明

本模块仅生成交易日的数据，当输入日期为非交易日时，会返回空数据表。交易日通过 DolphinDB 内置交易日历获取。由于存在多个交易所的交易日历，本文使用上交所的交易日历作为金融 Mock 数据生成模块的交易日。更多 DolphinDB 内置交易日历的说明，请参阅：[交易日历](../modules/MarketHoliday/mkt_calendar.html)。

模拟数据生成函数参考真实市场的交易量。对于每只标的，生成的一天数据量都相同，且生成的数据在一天中的交易时间段内均匀分布。生成的相关数值指标由随机数和固定值组成，不具备实际意义。具体数据量和说明如下表所示：

| **函数名** | **单日单标的数据量（行）** | **说明** | **函数名** | **单日单标的数据量（行）** | **说明** |
| --- | --- | --- | --- | --- | --- |
| 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* 指定。

**例子**

```dolphindb
snapshotData = stockSnapshot(tradeDate=2020.01.06, securityNumber=10)
```

#### 3.1.2 stockEntrust

`stockEntrust(tradeDate, securityNumber)`

**参数**

- *tradeDate*：DATE 类型的标量，表示逐笔委托数据的日期。
- *securityNumber*：INT 类型的标量，表示股票标的数量。

**详情**

创建一天的逐笔委托数据，并以表的数据形式返回。交易日期通过 *tradeDate* 指定，股票标的数量通过 *securityNumber* 指定。

**例子**

```dolphindb
entrustData = stockEntrust(tradeDate=2020.01.06, securityNumber=10)
```

#### 3.1.3 stockTrade

`stockTrade(tradeDate, securityNumber)`

**参数**

- *tradeDate*：DATE 类型的标量，表示逐笔成交数据的日期。
- *securityNumber*：INT 类型的标量，表示股票标的数量。

**详情**

创建一天的逐笔成交数据，并以表的数据形式返回。交易日期通过 *tradeDate* 指定，股票标的数量通过 *securityNumber* 指定。

**例子**

```dolphindb
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* 指定。

**例子**

```dolphindb
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* 指定。

**例子**

```dolphindb
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* 指定。

**例子**

```dolphindb
optionsSnapshotData = optionsSnapshot(tradeDate=2020.01.06, instrumentNumber=14000)
```

### 3.3 期货数据

#### 3.3.1 futuresSnapshot

`futuresSnapshot(tradeDate, instrumentNumber)`

**参数**

- *tradeDate*：DATE 类型的标量，表示期货数据的日期。
- *instrumentNumber*：INT 类型的标量，表示期货合约数量。

**详情**

创建一个单日的期货数据，并以表的数据形式返回。交易日期通过 *tradeDate* 指定，期权标的数量通过 *instrumentNumber* 指定。

**例子**

```dolphindb
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* 指定。

**例子**

```dolphindb
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* 指定。

**例子**

```dolphindb
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* 指定。

**例子**

```dolphindb
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* 指定。

**例子**

```dolphindb
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* 指定。

**例子**

```dolphindb
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* 指定。

**例子**

```dolphindb
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* 指定。

**例子**

```dolphindb
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* 指定。

**例子**

```dolphindb
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* 指定。

**例子**

```dolphindb
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* 指定。

**例子**

```dolphindb
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* 指定。

**例子**

```dolphindb
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* 指定。

**例子**

```dolphindb
futuresFactorData = futuresFactor(startDate=2021.12.15,endDate=2021.12.31,securityNumber=50, 
    factorNumber=10)
```

上述代码会生成一个大小约为10.6GB，变量名为 futuresFactorData 的内存表。

## 4. 库表生成函数说明

由于不同类型的金融数据具有不同的表结构，自行创建这些库表会非常繁琐。在该模块中，我们将提供针对不同数据类型的库表创建函数，以便用户更轻松地创建所需的库表。本模块的建库建表代码参考自[存储金融数据的分区方案最佳实践](best_practices_for_partitioned_storage.html)。

### 4.1 股票数据

#### 4.1.1 stockSnapShotPT

`stockSnapShotPT(dbName, tbName)`

**参数**

- *dbName*：STRING 类型的标量，表示存储快照数据的数据库名。
- *tbName*：STRING 类型的标量，表示存储快照数据的数据表名。

**详情**

创建存储快照数据的数据库表，并返回数据表的句柄。数据库名通过 *dbName* 指定，数据表名通过 *tbName* 指定。

**例子**

```dolphindb
t = stockSnapShotPT("dfs://merge_TB", "merge_snapshotTB")
```

#### 4.1.2 stockEntrustPT

`stockEntrustPT(dbName, tbName)`

**参数**

- *dbName*：STRING 类型的标量，表示存储逐笔委托数据的数据库名。
- *tbName*：STRING 类型的标量，表示存储逐笔委托数据的数据表名。

**详情**

创建存储逐笔委托数据的数据库表，并返回数据表的句柄。数据库名通过 *dbName* 指定，数据表名通过 *tbName* 指定。

**例子**

```dolphindb
t = stockEntrustPT("dfs://merge_TB", "merge_entrustTB")
```

#### 4.1.3 stockTradePT

`stockTradePT(dbName, tbName)`

**参数**

- *dbName*：STRING 类型的标量，表示存储逐笔成交数据的数据库名。
- *tbName*：STRING 类型的标量，表示存储逐笔成交数据的数据表名。

**详情**

创建存储逐笔成交数据的数据库表，并返回数据表的句柄。数据库名通过 *dbName* 指定，数据表名通过 *tbName* 指定。

**例子**

```dolphindb
t = stockTradePT("dfs://merge_TB", "merge_tradeTB")
```

#### 4.1.4 stockMinuteKLinePT

`stockMinuteKLinePT(dbName, tbName)`

**参数**

- *dbName*：STRING 类型的标量，表示存储分钟 K 数据的数据库名。
- *tbName*：STRING 类型的标量，表示存储分钟 K 数据的数据表名。

**详情**

创建存储分钟K数据的数据库表，并返回数据表的句柄。数据库名通过 *dbName* 指定，数据表名通过 *tbName* 指定。

**例子**

```dolphindb
t = stockMinuteKLinePT("dfs://k_minute_level", "k_minute")
```

#### 4.1.5 stockDailyKLinePT

`stockDailyKLinePT(dbName, tbName)`

**参数**

- *dbName*：STRING 类型的标量，表示存储日 K 数据的数据库名。
- *tbName*：STRING 类型的标量，表示存储日 K 数据的数据表名。

**详情**

创建存储日 K 数据的数据库表，并返回数据表的句柄。数据库名通过 *dbName* 指定，数据表名通过 *tbName* 指定。

**例子**

```dolphindb
t = stockDailyKLinePT("dfs://k_day_level", "k_day")
```

### 4.2 期货数据

#### 4.2.1 futuresPT

`futuresPT(dbName, tbName)`

**参数**

- *dbName*：STRING 类型的标量，表示存储期货数据的数据库名。
- *tbName*：STRING 类型的标量，表示存储期货数据的数据表名。

**详情**

创建存储期货数据的数据库表，并返回数据表的句柄。数据库名通过 *dbName* 指定，数据表名通过 *tbName* 指定。

**例子**

```dolphindb
t = futuresPT("dfs://ctp_futures", "futures")
```

### 4.3 期权数据

#### 4.3.1 optionsPT

`optionsPT(dbName, tbName)`

**参数**

- *dbName*：STRING 类型的标量，表示存储期权数据的数据库名。
- *tbName*：STRING 类型的标量，表示存储期权数据的数据表名。

**详情**

创建存储期权数据的数据库表，并返回数据表的句柄。数据库名通过 *dbName* 指定，数据表名通过 *tbName* 指定。

**例子**

```dolphindb
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* 指定。

**例子**

```dolphindb
t = ESPDepthPT("dfs://ESPDepth", "ESPDepthtable")
```

#### 4.4.2 ESPTradePT

`ESPTradePT(dbName, tbName)`

**参数**

- *dbName*：STRING 类型的标量，表示存储银行间债券 ESP 成交数据的数据库名。
- *tbName*：STRING 类型的标量，表示存储银行间债券 ESP 成交数据的数据表名。

**详情**

创建银行间债券ESP成交数据的数据库表，并返回数据表的句柄。数据库名通过 *dbName* 指定，数据表名通过 *tbName* 指定。

**例子**

```dolphindb
t = ESPTradePT("dfs://ESPTrade", "ESPTradetable")
```

#### 4.4.3 XBondDepthPT

`XBondDepthPT(dbName, tbName)`

**参数**

- *dbName*：STRING 类型的标量，表示存储银行间债券 XBond 报价数据的数据库名。
- *tbName*：STRING 类型的标量，表示存储银行间债券 XBond 报价数据的数据表名。

**详情**

创建银行间债券XBond报价数据的数据库表，并返回数据表的句柄。数据库名通过 *dbName* 指定，数据表名通过 *tbName* 指定。

**例子**

```dolphindb
t = XBondDepthPT("dfs://XBondDepth", "XBondDepthtable")
```

#### 4.4.4 XBondTradePT

`XBondTradePT(dbName, tbName)`

**参数**

- *dbName*：STRING 类型的标量，表示存储银行间债券 XBond 成交数据的数据库名。
- *tbName*：STRING 类型的标量，表示存储银行间债券 XBond 成交数据的数据表名。

**详情**

创建银行间债券 XBond 成交数据的数据库表，并返回数据表的句柄。数据库名通过 *dbName* 指定，数据表名通过 *tbName* 指定。

**例子**

```dolphindb
t = XBondTradePT("dfs://XBondTrade", "XBondTradetable")
```

### 4.5 因子库数据

#### 4.5.1 dailyFactorPT

`dailyFactorPT(dbName, tbName)`

**参数**

- *dbName*：STRING 类型的标量，表示存储日频因子数据的数据库名。
- *tbName*：STRING 类型的标量，表示存储日频因子数据的数据表名。

**详情**

创建日频因子数据的数据库表，并返回数据表的句柄。数据库名通过 *dbName* 指定，数据表名通过 *tbName* 指定。

**例子**

```dolphindb
t = dailyFactorPT("dfs://dayFactorDB", "dayFactorTB")
```

#### 4.5.2 halfHourFactorPT

`halfHourFactorPT(dbName, tbName)`

**参数**

- *dbName*：STRING 类型的标量，表示存储半小时频因子数据的数据库名。
- *tbName*：STRING 类型的标量，表示存储半小时频因子数据的数据表名。

**详情**

创建半小时频因子数据的数据库表，并返回数据表的句柄。数据库名通过 *dbName* 指定，数据表名通过 *tbName* 指定。

**例子**

```dolphindb
t = halfHourFactorPT("dfs://halfhourFactorDB", "halfhourFactorTB")
```

#### 4.5.3 tenMinutesFactorPT

`tenMinutesFactorPT(dbName, tbName)`

**参数**

- *dbName*：STRING 类型的标量，表示存储十分钟频因子数据的数据库名。
- *tbName*：STRING 类型的标量，表示存储十分钟频因子数据的数据表名。

**详情**

创建十分钟频因子数据的数据库表，并返回数据表的句柄。数据库名通过 *dbName* 指定，数据表名通过 *tbName* 指定。

**例子**

```dolphindb
t = tenMinutesFactorPT("dfs://tenMinutesFactorDB", "tenMinutesFactorTB")
```

#### 4.5.4 minuteFactorPT

`minuteFactorPT(dbName, tbName)`

**参数**

- *dbName*：STRING 类型的标量，表示存储分钟频因子数据的数据库名。
- *tbName*：STRING 类型的标量，表示存储分钟频因子数据的数据表名。

**详情**

创建分钟频因子数据的数据库表，并返回数据表的句柄。数据库名通过 *dbName* 指定，数据表名通过 *tbName* 指定。

**例子**

```dolphindb
t = minuteFactorPT("dfs://minuteFactorDB", "minuteFactorTB")
```

#### 4.5.5 secondFactorPT

`secondFactorPT(dbName, tbName)`

**参数**

- *dbName*：STRING 类型的标量，表示存储秒钟频因子数据的数据库名。
- *tbName*：STRING 类型的标量，表示存储秒钟频因子数据的数据表名。

**详情**

创建秒钟频因子数据的数据库表，并返回数据表的句柄。数据库名通过 *dbName* 指定，数据表名通过 *tbName* 指定。

**例子**

```dolphindb
t = secondFactorPT("dfs://secondFactorDB", "secondFactorTB")
```

#### 4.5.6 level2FactorPT

`level2FactorPT(dbName, tbName)`

**参数**

- *dbName*：STRING 类型的标量，表示存储Level-2 快照频因子数据的数据库名。
- *tbName*：STRING 类型的标量，表示存储Level-2 快照频因子数据的数据表名。

**详情**

创建Level-2 快照频因子数据的数据库表，并返回数据表的句柄。数据库名通过 *dbName* 指定，数据表名通过 *tbName* 指定。

**例子**

```dolphindb
t = level2FactorPT("dfs://level2FactorDB", "level2FactorTB")
```

#### 4.5.7 tickFactorPT

`tickFactorPT(dbName, tbName)`

**参数**

- *dbName*：STRING 类型的标量，表示存储逐笔频因子数据的数据库名。
- *tbName*：STRING 类型的标量，表示存储逐笔频因子数据的数据表名。

**详情**

创建逐笔频因子数据的数据库表，并返回数据表的句柄。数据库名通过 *dbName* 指定，数据表名通过 *tbName* 指定。

**例子**

```dolphindb
t = tickFactorPT("dfs://tickFactorDB", "tickFactorTB")
```

#### 4.5.8 futuresFactorPT

`futuresFactorPT(dbName, tbName)`

**参数**

- *dbName*：STRING 类型的标量，表示存储期货500ms频因子数据的数据库名。
- *tbName*：STRING 类型的标量，表示存储期货500ms频因子数据的数据表名。

**详情**

创建期货500ms频因子数据的数据库表，并返回数据表的句柄。数据库名通过 *dbName* 指定，数据表名通过 *tbName* 指定。

**例子**

```dolphindb
t = futuresFactorPT("dfs://futuresFactorDB", "futuresFactorTB")
```

## 5. 应用示例

用户可以将第 3 节中生成的模拟数据，存入第 4 节所创建的数据库表，以 Level2 快照行情为例，代码如下：

```dolphindb
use MockData

snapshotData = stockSnapshot(tradeDate=2020.01.06, securityNumber=10)
t = stockSnapShotPT("dfs://merge_TB", "merge_snapshotTB")
t.append!(snapshotData)
```

相应的金融数据可存入对应数据库表，Mock 数据生成函数与数据库表创建函数的对应关系如下：

| **数据生成函数** | **数据库表创建函数** |
| --- | --- |
| stockSnapshot | stockSnapShotPT |
| stockEntrust | stockEntrustPT |
| stockTrade | stockTradePT |
| stockMinuteKLine | stockMinuteKLinePT |
| stockDailyKLine | stockDailyKLinePT |
| optionsSnapshot | optionsPT |
| futuresSnapshot | futuresPT |
| ESPDepth | ESPDepthPT |
| ESPTrade | ESPTradePT |
| XBondDepth | XBondDepthPT |
| XBondTrade | XBondTradePT |
| dailyFactor | dailyFactorPT |
| halfHourFactor | halfHourFactorPT |
| tenMinutesFactor | tenMinutesFactorPT |
| minuteFactor | minuteFactorPT |
| secondFactor | secondFactorPT |
| level2Factor | level2FactorPT |
| tickFactor | tickFactorPT |
| futuresFactor | futuresFactorPT |

## 6. 常见问题

### 6.1 创建数据库表时报错：CacheEngineOOM

执行数据插入数据库表的代码后可能会出现 CacheEngineOOM 的问题，示例代码如下：

```dolphindb
minuteKLineData = genStockMinuteKLine(startDate=2020.01.01, endDate=2020.06.30, securityNumber=2000)
t = createMinuteKLineTable("dfs://MinuteK", "MinuteK")
t.append!(minuteKLineData)
```

报出如下错误：

```dolphindb
::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](../funcs/s/setOLAPCacheEngineSize.html) 在线增大 OLAP Cache Engine 的容量，需要注意同时修改配置项 *OLAPCacheEngineSize*，否则重启后在线修改的容量会失效。

### 6.2 查询数据库时报错：The query is too large

执行查询数据库表的代码后可能会出现查询分区数量过多的问题，示例代码如下：

```dolphindb
temp = select top 100 * from loadTable(db_path, tb_name)
```

报出如下错误：

```dolphindb
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行记录，示例代码如下：

```dolphindb
snapshotData = stockSnapshot(tradeDate=2020.01.05, securityNumber=10)
select * from snapshotData
```

2020.01.05 为非交易日。本模块仅生成交易日的数据，当输入日期为非交易日时，会返回空数据表。交易日通过[交易日历](../modules/MarketHoliday/mkt_calendar.html)进行获取，且默认使用上交所交易日历。

**解决方法：**

- *tradeDate* 填入真实的交易日。

### 6.4 创建分布式数据库表时报错

执行创建数据库表的代码后可能会出现无法写入一个已经存在的数据库的问题，示例代码如下：

```dolphindb
t = ESPDepthPT("dfs://merge_TB", "merge_TB")
```

报出如下错误：

```dolphindb
MockData::ESPDepthPT: db = database(newdbName, VALUE, 2022.06.01 .. 2023.01.01, , "TSDB") => 
	It is not allowed to overwrite an existing database.
```

**解决方法：**

- 建议使用其他名字或者删掉该数据库再创建该数据库表。

  删除指定数据库的代码如下：

  ```dolphindb
  dropDatabase("dfs://merge_TB")
  ```

  检查指定数据库是否存在的代码如下：

  ```dolphindb
  existsDatabase("dfs://merge_TB")
  ```

## 附录

[MockData](script/financial_mock_data_generation_module/MockData.dos)
