bse

北交所及全国股转系统的行情数据通常以 DBF 文件形式写入固定路径。在量化交易或数据分析场景中,用户需要将这些文件实时、稳定地接入 DolphinDB。手动编写轮询脚本不仅开发成本高,且难以保证解析性能和数据一致性。

bse 插件为这一需求提供了原生支持,其核心能力包括:

  • 自动化监控:插件能够持续监听指定路径下的 NQHQ、NQXX 和 NQXYXX 类型 DBF 文件。

  • 全量增量化处理:每当上游系统更新文件版本,插件会自动触发全量解析,并将解析后的数据以批量追加的方式写入 DolphinDB 共享表。

  • 高并发支持:支持不同文件类型的任务并行运行,满足多源数据同步接入的需求。

  • 数据增强:在解析过程中自动补充交易日期、文件时间及处理耗时等上下文信息,方便后续的审计与性能分析。

安装插件

版本要求

DolphinDB Server 版本要求:3.00.6 及更高版本。

部署环境要求: LINUX-ABI。

安装步骤

  1. 在 DolphinDB 客户端中使用 listRemotePlugins 函数查看可供安装的插件。

    login("admin", "123456")
    listRemotePlugins()
  2. 使用 installPlugin 函数安装插件。

    installPlugin("bse")
  3. 使用 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 类型用于标识当前交易日是否已接收到收盘文件:

  • 已接收到收盘文件时为 true。

  • 未接收到时为 false。

该字段仅对 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 前的处理耗时,单位为纳秒。