bse
北交所及全国股转系统的行情数据通常以 DBF 文件形式写入固定路径。在量化交易或数据分析场景中,用户需要将这些文件实时、稳定地接入 DolphinDB。手动编写轮询脚本不仅开发成本高,且难以保证解析性能和数据一致性。
bse 插件为这一需求提供了原生支持,其核心能力包括:
-
自动化监控:插件能够持续监听指定路径下的 NQHQ、NQXX 和 NQXYXX 类型 DBF 文件。
-
全量增量化处理:每当上游系统更新文件版本,插件会自动触发全量解析,并将解析后的数据以批量追加的方式写入 DolphinDB 共享表。
-
高并发支持:支持不同文件类型的任务并行运行,满足多源数据同步接入的需求。
-
数据增强:在解析过程中自动补充交易日期、文件时间及处理耗时等上下文信息,方便后续的审计与性能分析。
安装插件
版本要求
DolphinDB Server 版本要求:3.00.6 及更高版本。
部署环境要求: LINUX-ABI。
安装步骤
-
在 DolphinDB 客户端中使用 listRemotePlugins 函数查看可供安装的插件。
login("admin", "123456") listRemotePlugins() -
使用 installPlugin 函数安装插件。
installPlugin("bse") -
使用 loadPlugin 函数加载插件。
loadPlugin("bse")
接口说明
start
语法
bse::start(dataType, filePath, outputTable)
详情
启动指定文件类型的文件接入任务。任务启动后,插件会先读取 filePath 指定的当前 DBF 文件;后续当该文件被上游系统更新时,插件会自动重新解析完整文件,并将本次文件中的全量行情数据批量追加到 outputTable。
同一 DolphinDB 进程内,每种文件类型同一时间只能对应一个运行中的接入任务。若需重新启动同一类型的任务,请先调用
stop(dataType) 停止该任务,或调用 stop()
停止全部任务。
参数
dataType STRING 类型标量,指定文件协议类型。可取 “NQHQ”、“NQXX” 或 “NQXYXX”,大小写不敏感。
filePath STRING 类型标量,指定待监控的 DBF 文件全路径(包含文件名及后缀)。不能传入目录。上游应定时更新该文件,插件检测到文件内容变化后解析并写入共享表。
outputTable 共享表(内存表或流数据表)。指定实际写入的输出表。其列类型和顺序必须与
getSchema(dataType) 返回的 schema 一致。除原始 DBF
行情字段外,输出表还包含插件补充的辅助列。具体辅助列说明见“附录:输出表辅助列说明”。
返回值
无。
stop
语法
bse::stop([dataType])
详情
停止指定文件类型的文件接入任务。传入 dataType 时,仅停止该类型正在运行的任务;不传参数时,停止当前进程内全部文件类型的接入任务。停止过程中,插件会等待正在进行的文件处理流程完成后再退出,避免中断当前批次的数据写入。
参数
dataType 可选参数,STRING 类型标量,指定要停止的文件协议类型。可取 “NQHQ”、“NQXX” 或 “NQXYXX”,大小写不敏感。
返回值
无。
getSchema
语法
bse::getSchema(dataType)
详情
获取指定文件类型的源行情字段 schema。
参数
dataType STRING 类型标量,指定文件协议类型。可取 “NQHQ”、“NQXX” 或 “NQXYXX”,大小写不敏感。
返回值
一张表,包含以下列:
| 列名 | 类型 | 说明 |
|---|---|---|
| name | STRING | 列名 |
| type | STRING | 类型名 |
| typeInt | INT | 类型枚举值 |
getStatus
语法
bse::getStatus()
详情
查询三种文件类型的文件接入任务状态,用于查看任务是否已启动、是否正在运行,以及最近一次文件检查、文件读取、数据写入和错误信息等运行情况。返回结果固定包含 NQHQ、NQXX 和 NQXYXX 三行,分别对应一种文件类型;如果某一类型尚未启动过接入任务,其 state 显示为 NOT_STARTED。
参数
无。
返回值
一张表,包含以下列:
| 列名 | 数据类型 | 说明 |
|---|---|---|
| dataType | SYMBOL | 文件协议类型。 |
| state | SYMBOL | 任务状态,取值为 NOT_STARTED、RUNNING、STOPPING、STOPPED 或 FAILED。 |
| filePath | STRING | 被监控的 DBF 文件路径。 |
| startTime | NANOTIMESTAMP | 最近一次启动时间。 |
| endTime | NANOTIMESTAMP | 最近一次停止时间;未停止时为空。 |
| lastCheckTime | NANOTIMESTAMP | 最近一次检查文件的时间。 |
| lastReceiveTime | NANOTIMESTAMP | 最近一次稳定读取文件的时间。 |
| lastMarketTime | TIMESTAMP | 最近成功处理的文件行情时间。 |
| versionsSeen | LONG | 检测到的稳定文件版本数。插件会连续读取同一文件两次;如果两次读取结果一致,认为该文件版本已稳定,并计入该字段。 |
| versionsProcessed | LONG | 成功写入的文件版本数。 |
| versionsRejected | LONG | 文件级校验失败的版本数。 |
| recordsProcessed | LONG | 成功写入的行情记录数。 |
| recordsRejected | LONG | 行级校验失败的记录数。 |
| closeReceived | BOOL |
NQHQ 类型用于标识当前交易日是否已接收到收盘文件:
该字段仅对 NQHQ 有业务意义;NQXX 和 NQXYXX 不涉及收盘文件,固定返回 false。 |
| lastErrorTime | NANOTIMESTAMP | 最近一次错误发生时间。 |
| lastError | STRING | 最近一次错误信息。 |
完整示例
以下示例监控一个确定路径的 NQHQ.DBF 文件,并将行情写入共享流数据表。普通共享表同样支持。
loadPlugin("bse")
go
// 根据插件 schema 创建共享流数据表。
dataType = "NQHQ"
quotationSchema = bse::getSchema(dataType)
quotation = streamTable(
100000:0,
quotationSchema[`name],
quotationSchema[`type]
)
share quotation as bse
go
// 启动文件监控。filePath 必须是一个确定的 DBF 文件,而不是目录。
bse::start(dataType, "/data/bse/NQHQ.DBF", bse)
// 查询运行状态。
bse::getStatus()
// 停止任务。
bse::stop(dataType)
// 不传 dataType 时停止所有类型:
// bse::stop()
附录:输出表辅助列说明
插件在原始 DBF 行情字段之外会自动补充以下辅助列,用于标识交易日期、文件版本状态及处理时间等信息。创建 outputTable
时,除源行情字段外,也需要包含对应文件类型适用的辅助列,并确保整体结构与 getSchema(dataType)
返回结果一致。
| 列名 | 适用文件类型 | 列类型 | 说明 |
|---|---|---|---|
| tradeDate | NQHQ, NQXX, NQXYXX | DATE | 交易日期。插件从 DBF 文件的第一条记录(文件头记录)中解析获取。 |
| fileTime | NQHQ, NQXX, NQXYXX | TIME | 特殊首记录中的文件时间。 |
| fileState | NQHQ | SYMBOL | 文件阶段:TRADING、CLOSE 或 AFTER。 |
| isTest | NQHQ | BOOL | 是否为测试行情。 |
| fileModifiedTime | NQHQ, NQXX, NQXYXX | NANOTIMESTAMP | 一致性读取后,最终确认的文件修改时间。 |
| receiveTime | NQHQ, NQXX, NQXYXX | NANOTIMESTAMP | 完成文件读取的时间与 fileModifiedTime 使用相同的本地时间口径。 |
| elapsedTime | NQHQ, NQXX, NQXYXX | LONG | 从 receiveTime 到 append 前的处理耗时,单位为纳秒。 |
