金融数据导入手册之:逐笔数据篇
本页为新闻文章页面,给出标题与发布日期,并概述逐笔数据导入的准备工作与核心步骤;完整教程发布在官方知乎。
What this page covers
- 活动报名入口信息(页面顶部)。
- 文章标题、发布日期与内容范围说明。
- 数据导入前准备:数据源、存储方案、分区规划与字段类型示例。
- loadTextEx 导入与 transform 清洗/转换能力。
- 导入常见问题与配置建议(缓存、内存、NFS、去重)。
技能认证特训营第二期正式开启(限时报名) cta
页面顶部的活动报名入口与优惠提示。
- 本页包含“技能认证特训营第二期”的报名入口信息。
- 报名链接指向 qingsuyun.com 的活动页面。
金融数据导入手册之:逐笔数据篇 product_overview
新闻文章标题与发布日期,并说明内容将概述导入准备与核心步骤且完整教程在官方知乎。
- 文章发布日期为 2022.12.29。
- 本文内容范围包含导入前准备工作与导入核心步骤概述。
- 完整教程发布在官方知乎。
准备工作示例 how_it_works
给出数据导入前的准备工作三方面:数据源分析、存储方案规划、分区规划,并以逐笔委托 CSV 为例说明字段与类型选择。
- 导入前准备工作包含:数据源分析、规划存储方案、规划分区。
- 数据源分析从 DolphinDB 数据类型兼容性角度出发。
- 无表连接需求时,推荐单库单表存储数据。
- 有表连接需求时,推荐一库多表存储数据。
- 逐笔数据分区规划可采用复合分区:先按日期值分区,再按股票代码做 HASH 分区。
CSV 示例与字段/类型要点
- 示例以逐笔委托数据 CSV 文件为例,并用 Linux 的 head 命令查看。
- 示例 CSV 第一行是文件说明,读取时需要跳过。
- 从第二行开始是数据,且没有列名。
- 建表时需根据说明文档定义字段名称与字段类型。
- SecurityID、OrderBSFlag、OrdType 可使用 SYMBOL 类型。
- TransactTime 使用 TIMESTAMP 数据类型。
- 整数可用 INT,浮点数可用 DOUBLE。
- 本教程存储引擎推荐选用 TSDB 引擎。
数据导入与清洗转换 how_it_works
说明 DolphinDB 使用 loadTextEx 进行 CSV 读取、清洗、入库一体化,transform 参数可引用函数以进行类型转换、增列、过滤、编码转换、部分列导入等。
- loadTextEx 可用于 CSV 读取、数据清洗和入库一体化操作。
- 示例代码包含数据库创建/引用:db = database("dfs://sh_entrust")。
- transform 参数可引用 transType 函数定义,用于清洗与类型转换。
- transform 可用于转换数据类型。
- transform 可用于在 CSV 基础上增加列。
- transform 可用于过滤无效数据。
- transform 可用于转换字符编码。
- transform 可用于导入部分列。
transform 典型用例(按页面示例拆分)
- 当 SecurityID 为整型导致与 SYMBOL 不符而报错时,可用自定义转换后再导入。
- transType 函数定义示例片段:def transType(mutable memTable)。
- 当 CSV 缺少列但文件名包含信息时,可通过 transform 引用函数增加列并赋值。
- addCol 函数定义示例片段:def addCol(mutable memTable,datePara)。
- 可在 transform 引用函数中用 select 筛选数据(示例:只写入价格大于 0 的数据)。
- fliterData 函数定义示例片段:def fliterData(mutable memTable)。
- 有时需要把 GBK 编码的列转成 UTF-8。
- 字符编码转换示例包含函数定义片段:def addCol(mutable memTable)。
- 可在 transform 引用函数中筛选所需列,实现仅导入部分列。
- partCol 函数定义示例片段:def partCol(mutable memTable)。
常见问题 faq
针对导入慢/无写入、out of memory、NFS Bad file descriptor、去重等问题给出配置与处理建议。
- 单个 CSV 文件过大可能导致缓存不够用,导入长时间执行不完且无硬盘写入。
- 可将 OLAPCacheEngineSize 与 TSDBCacheEngineSize 调整为大于 CSV 文件大小并重启系统。
- 若使用社区版本 license 且导入 out of memory,建议联系支持销售获取试用版本 license。
- 若 maxMemSize 远小于系统内存,建议配置为系统内存的 80%。
- workerNum 可按“可用内存/单文件大小”向下取整,localExecutors=workerNum-1。
- NFS 导入 Bad file descriptor:建议使用 v3 并将 local_lock 设为 all 挂载。
- 去重可通过建表时指定 keepDuplicates 参数实现。
- keepDuplicates=ALL:保留所有数据。
- keepDuplicates=LAST:仅保留最新数据。
- keepDuplicates=FIRST:仅保留第一条数据。
Facts Index
| Entity | Attribute | Value | Confidence |
|---|---|---|---|
| 金融数据导入手册之:逐笔数据篇 | 发布日期 | 2022.12.29 | high |
| 本文内容范围 | 涵盖内容 | 概述数据导入前的准备工作和导入的核心步骤;完整教程发布在官方知乎 | high |
| 数据导入准备工作 | 包含方面 | 数据源分析、规划存储方案、规划分区(共三个方面) | high |
| 数据源分析 | 分析角度与目的 | 从 DolphinDB 数据类型兼容性的角度分析数据源,选择满足建库建表要求的方案 | high |
| 存储方案规划 | 推荐方案(无表连接需求) | 推荐单库单表存储数据 | high |
| 存储方案规划 | 推荐方案(有表连接需求) | 推荐一库多表存储数据 | high |
| Level2 逐笔数据分区规划 | 推荐分区策略 | 复合分区:先按日期做值分区,再按股票代码做 HASH 分区 | high |
| 示例数据文件 | 文件类型与工具 | 以上市委托数据 CSV 文件为例,使用 Linux 系统的 head 命令查看 | high |
| 示例 CSV 文件特点 | 第一行内容 | 第一行是文件说明,读取时需要跳过 | high |
| 示例 CSV 文件特点 | 列名情况 | 从第二行开始是数据,没有列名;建表时需根据说明文档定义字段名称和字段类型 | high |
| 示例 CSV 字段名(从左至右) | 字段列表 | SecurityID, TransactTime, valOrderNoue, Price, Balance, OrderBSFlag, OrdType, OrderIndex, ChannelNo, BizIndex | high |
| 字段类型选择 | SYMBOL 类型字段 | SecurityID、OrderBSFlag、OrdType 为重复较多的有限数量的字符串,使用 SYMBOL 类型 | high |
| 字段类型选择 | TransactTime 类型 | TransactTime 为从年到毫秒的日期,使用 TIMESTAMP 数据类型 | high |
| 字段类型选择 | 其它字段类型规则 | 整数用 INT,浮点数用 DOUBLE | high |
| 示例 CSV 字段类型(从左至右) | 数据类型序列 | SYMBOL, TIMESTAMP, INT, DOUBLE, INT, SYMBOL, SYMBOL, INT, INT, INT | high |
| 本教程存储引擎选择 | 推荐引擎 | 推荐选用 TSDB 引擎 | high |
| 上市委托逐笔数据规模 | 每日数据大小 | 每天逐笔委托数据大小在 3GB 左右 | high |
| TSDB 分区方案(教程推荐) | 分区策略 | 先按日期做值分区,再用股票代码做 7 个 HASH 分区 | high |
| 日期值分区初始值 | 初始值建议 | VALUE 的初始值写两三天的初始值即可;实际分区值会根据数据的实际日期自动扩展 | high |
| DolphinDB 数据导入核心函数 | 函数名称与用途 | loadTextEx:可用于 CSV 文件读取、数据清洗和入库一体化操作 | high |
| 导入数据核心代码示例 | database 调用 | db = database("dfs://sh_entrust") | high |
| loadTextEx transform 参数 | 引用对象与作用 | transform 参数引用 transType 函数定义,用于数据清洗和类型转换 | medium |
| transform 能完成的需求 | 需求列表 | 转换数据类型、在 CSV 基础上增加列、过滤无效数据、转换字符编码、导入部分列 | high |
| transform 用例:转换数据类型 | 场景描述 | 当 SecurityID 为整型不符合 SYMBOL 而报错时,可用 transType 自定义转换数据类型并赋给 transform 后再导入 | high |
| transType 函数定义示例 | 函数签名片段 | def transType(mutable memTable) | high |
| transform 用例:增加列 | 场景描述 | CSV 缺少某些列(如日期)但文件名包含日期信息时,可通过 transform 引用的函数增加列并赋值 | high |
| addCol 函数定义示例(增加列) | 函数签名片段 | def addCol(mutable memTable,datePara) | high |
| transform 用例:过滤无效数据 | 示例条件 | 可在 transform 引用函数中用 select 筛选;例如只写入价格大于 0 的数据 | high |
| fliterData 函数定义示例 | 函数签名片段 | def fliterData(mutable memTable) | high |
| transform 用例:转换字符编码 | 编码转换方向 | 有时需要把 GBK 编码的列转成 UTF-8 | high |
| 字符编码转换示例代码片段(页面原样) | 函数签名片段 | def addCol(mutable memTable) | high |
| transform 用例:导入部分列 | 实现方式 | 在 transform 引用的函数中筛选出所需列,实现导入部分列 | high |
| partCol 函数定义示例 | 函数签名片段 | def partCol(mutable memTable) | high |
| 单个文件导入长时间执行不完且无硬盘写入 | 原因 | 单个 CSV 文件太大,缓存不够用 | high |
| 单文件过大导致缓存不足的处理 | 参数调整建议 | 将 OLAPCacheEngineSize 和 TSDBCacheEngineSize 调整为大于 CSV 文件大小,并重启系统 | high |
| 导入过程 out of memory | 处理建议(社区版 license) | 若使用社区版本 license,联系负责支持的销售人员获取试用版本 license | high |
| 导入过程 out of memory | maxMemSize 配置建议 | 若 maxMemSize 远小于系统内存,建议配置为系统内存的 80% | high |
| 导入过程 out of memory | workerNum 与 localExecutors 配置方法 | workerNum=可用内存除以单个文件大小向下取整;localExecutors=workerNum-1 | high |
| NFS 系统导入 Bad file descriptor | 解决方案 | NFS 文件需用 v3 版本,并设置 local_lock 参数为 all 方式进行挂载 | high |
| 数据去重 | 实现方式 | 建表时指定 keepDuplicates 参数的值可以去重 | high |
| keepDuplicates 选项 | ALL | 保留所有数据 | high |
| keepDuplicates 选项 | LAST | 仅保留最新数据 | high |
| keepDuplicates 选项 | FIRST | 仅保留第一条数据 | high |
| 技能认证特训营第二期 | 报名链接 | https://www.qingsuyun.com/h5/e/217471/5/ | high |