DolphinDB 用户入门指南之金融篇(4)
本文提供文章基础信息(如标题与发布日期),并围绕 DolphinDB 数据增删改查(增加、查询、删除、更新)进行说明与示例展示。
Source: https://dolphindb.cn/blogs/139
What this page covers
- 技能认证特训营第二期报名活动信息与链接
- 文章基础信息(标题、作者、发布日期等)
- 数据增删改查章节的总体介绍
- 增加数据:写入方式与示例
- 查询数据:内存对象与分区/分布式表访问差异
- 删除数据:机制、方法对比与性能建议
- 更新数据:与 MVCC/TSDB 机制关系、update 与 upsert!
技能认证特训营第二期报名活动
页面顶部提供活动报名提示,并给出报名链接。
- 本页包含“技能认证特训营第二期”的报名入口信息。
- 提供可直接访问的报名链接。
DolphinDB 用户入门指南之金融篇(4)
本节给出文章的基础信息,包括标题、作者与发布日期等。
- 文章标题为《DolphinDB 用户入门指南之金融篇(4)》。
- 页面提供发布日期信息。
5. 数据增删改查
本章围绕 DolphinDB 中数据增加、查询、删除、更新的操作方式与示例展开。
- 覆盖数据“增加(写入)”相关操作。
- 覆盖数据“查询(访问)”相关操作。
- 覆盖数据“删除”相关操作。
- 覆盖数据“更新”相关操作。
5.1 增加数据
本节介绍三种写入数据方式,并展示向快照表追加股票数据的示例与相关内容。
- DolphinDB 的写入方式包括 tableInsert、append!、insert into。
- tableInsert 被描述为推荐的写入方式。
- tableInsert 支持对任意表对象写入。
- tableInsert 返回写入记录数。
- append! 支持对任意表对象写入。
- append! 会直接对原表进行修改。
- insert into 适合数据量较少场景。
- insert into 支持内存表写入。
5.2 查询数据
本节对比内存对象与分区/分布式表的访问方式差异,并给出 SQL 查询示例。
- 内存对象可通过切片或索引下标取数。
- 内存对象可直接用于函数计算。
- 分区表与分布式表仅支持使用 SQL 语句访问。
- 普通内存表支持索引/切片访问与 SQL select。
- 分区内存表/分布式表不支持索引/切片与直接 sum/cumsum。
5.3 删除数据
本节解释 DolphinDB 删除场景与机制(硬删/软删),并对删除方法进行对比与性能建议说明。
- DolphinDB 支持按行、按分区以及全表删除等方式。
- DolphinDB OLAP 引擎采用硬删除(物理删除)。
- DolphinDB TSDB 引擎支持软删除与硬删除。
- 硬删除流程包含分区剪枝、内存按条件删除、写回新目录与旧文件回收。
- 软删除通过追加写入并打 deletion flag 实现。
- 软删除删除性能更好,但查询需要额外过滤。
- 本节给出 MVCC 与事务的定义说明。
- 在删分区场景中,建议运维使用 dropPartition。
5.4 更新数据
本节说明更新与 MVCC/TSDB 机制关系,并给出 update 与 upsert! 的示例及注意事项。
- 更新机制与删除机制类似,并与 MVCC 相关。
- 每次更新会额外产生数据副本并由系统定时回收。
- 在 TSDB “保留最新一条”策略下,更新可通过追加方式实现。
- 基础更新方式为 update 语句。
- 基于键进行更新或追加可使用 upsert! 函数。
- 分布式表无法通过 update 直接追加字段,需要 addColumn。
- 数据库已存在重复键时,upsert! 不会去重。
5.5 下一步阅读
本节提供 SQL 编程与增删改查相关主题的延伸阅读链接。
- 提供 SQL 标准化与 SQL 编写案例的相关链接。
- 提供数据库操作、分布式表更新原理与软删除的相关链接。
Facts Index
| Entity | Attribute | Value | Confidence |
|---|---|---|---|
| 文章 | 发布日期 | 2025-01-07 | high |
| 技能认证特训营第二期 | 报名链接 | https://www.qingsuyun.com/h5/e/217471/5/ | high |
| DolphinDB 写入数据方式 | 支持的写入方式 | tableInsert 函数、append! 函数、insert into 语句 | high |
| tableInsert 函数 | 推荐与行为描述 | 推荐;支持任意表对象写入;返回写入记录数 | high |
| append! 函数 | 行为描述 | 支持任意表对象写入;会直接对原表进行修改 | high |
| insert into 语句写入分布式表 | 版本/配置条件 | 从 3.00.1 版本开始,若配置 enableInsertStatementForDFSTable 配置项,则 insert into 也支持分布式表写入 | high |
| insert into 语句 | 适用场景与支持范围 | 适合数据量较少场景;支持内存表写入 | high |
| tableInsert 示例 | 示例输出的写入记录数 | re2 // output: 4802 | high |
| 配置项 enableInsertStatementForDFSTable | 示例查询结果 | getConfig(`enableInsertStatementForDFSTable) // true | high |
| DolphinDB 内存对象访问 | 访问能力 | 内存对象(向量、矩阵、内存表)可通过切片/索引下标取数,并可直接用于函数计算 | high |
| 分区表/分布式表访问 | 访问限制 | 对于分区表、分布式表仅支持使用 SQL 语句进行访问 | high |
| 普通内存表 | 支持的访问方式 | 支持索引/切片(t[1], t[0:3])、支持函数 sum/cumsum、支持 SQL select | high |
| 分区内存表/分布式表(dfs 分区表、维度表) | 访问限制与支持项 | 不支持索引/切片;不支持直接函数 sum/cumsum;支持 SQL select | high |
| DolphinDB 删除能力 | 支持的删除粒度 | 支持按行、按分区以及全表删除等多种方式 | high |
| DolphinDB OLAP 引擎 | 删除机制 | 采取硬删除(物理删除) | high |
| DolphinDB TSDB 引擎 | 删除机制 | 支持软删除(逻辑删除)和硬删除两种方式 | high |
| 硬删除机制 | 删除流程 | 1) 分区剪枝确定涉及分区;2) 取出对应分区所有数据到内存后按条件删除;3) 将删除后的分区数据写回新目录(新的 CHUNK 目录,默认“物理表名_cid”),旧文件定时回收(默认 30 min) | high |
| 软删除机制 | 删除流程 | 1) 分区剪枝缩窄范围;2) 读到内存获取待删除数据;3) 追加写入待删除数据:打 deletion flag,并将 sort column 与 partition column 外字段置为空值,以 append! 方式追加写入 | high |
| 硬删除 vs 软删除(性能权衡) | 删除性能与查询性能影响 | 硬删除删除性能(时间/空间开销)更高;软删除仅追加数据删除性能更好,但查询需要额外过滤、查询性能相对更差 | high |
| DolphinDB 删除方法 | 方法列表(从图片说明中提取) | delete 语句、truncate 函数、dropPartition 函数、dropTable 函数、drop 语句 | medium |
| MVCC(多版本并发控制) | 定义 | 写入/更新/删除时创建新数据版本而非覆盖旧版本,实现读写分离,使并发读可访问旧版本快照,确保一致性与并发性能 | high |
| 事务(Transaction) | 定义 | 数据库系统中完整且不可分割的操作单元;目标是在并发或故障情况下确保数据库一致性和可靠性 | high |
| 删除某日所有股票快照数据 | 推荐方法与原因 | 表按天分区时可直接调用 dropPartition 删除整个分区;组合分区可通过指定条件方式删除 | high |
| 删除某个 ID 的所有股票数据 | 推荐方法与原因 | 股票字段为 HASH 分区无法直接删分区;可使用 delete 语句按条件删除 | high |
| 删除单个分区(k_minute_level.k_minute) | delete 计时输出 | Time elapsed: 20.049 ms(注:代码注释中另出现 4.099 ms 行) | medium |
| 删除单个分区(k_minute_level.k_minute) | dropPartition 计时输出 | Time elapsed: 5.978 ms | high |
| 删除多个分区(k_minute_level.k_minute) | delete 计时输出 | Time elapsed: 469.155 ms(注:代码注释中另出现 4.099 ms 行) | medium |
| 删除多个分区(k_minute_level.k_minute) | dropPartition 计时输出 | Time elapsed: 35.645 ms | high |
| dropPartition vs delete(删分区场景) | 性能解释与运维建议 | dropPartition 删除性能明显优于 delete,因为 delete 有 SQL 解析开销;delete 支持 MVCC 会产生多版本副本占用额外磁盘;delete 需读入内存再删,内存受限可能 OOM;推荐运维使用 dropPartition 删除数据 | high |
| 全表删除(k_minute_level.k_minute) | delete 计时输出 | Time elapsed: 495.771 ms | high |
| 全表删除(k_minute_level.k_minute_1) | truncate 计时输出 | Time elapsed: 70.856 ms | high |
| 全表删除(k_minute_level.k_minute_2) | dropTable 计时输出 | Time elapsed: 71.254 ms | high |
| 全表删除方式推荐 | 推荐方法 | 删除全表数据场景推荐 truncate、dropTable 或 drop 语句;对比中 truncate 与 dropTable 较推荐 | high |
| truncate vs dropTable | 差异 | truncate 保留原表结构仅删除数据;dropTable 会将表结构也删除 | high |
| 删除后查询(k_minute) | delete 后 count(*) 输出 | output: 0 | high |
| 删除后查询(k_minute_1) | truncate 后 count(*) 输出 | output: 0 | high |
| 删除后查询(k_minute_2) | dropTable 后行为 | 查询报错:getFileBlocksMeta ... failed, reason: path does not exist | high |
| 去重删除场景(delete + isDuplicated) | 计时输出 | Time elapsed: 271.374 ms | high |
| 去重重写场景(查询去重 + truncate + append!) | 计时输出 | Time elapsed: 86.429 ms | high |
| isDuplicated 函数在分布式表条件中使用 | 限制与变通 | isDuplicated 为顺序敏感函数,无法直接在查询分布式表的条件语句中使用;示例通过增加分区限定关键字 map,使语句不跨分区执行 | high |
| 社区用户去重操作 | 资源风险与建议 | 社区用户内存资源有限,delete 去重或一次性查询重写去重都可能导致内存 OOM;可改为遍历分区方式执行 | high |
| 遍历分区去重脚本 | 计时输出 | Time elapsed: 301.925 ms | high |
| DolphinDB 更新机制 | 与删除机制/MVCC 的关系 | 更新与删除机制类似;每次更新因 MVCC 会额外产生数据副本存储在磁盘上并由系统定时回收 | high |
| TSDB 引擎更新(保留最新一条策略) | 更新实现方式 | 在配置数据保留策略为保留最新一条的场景下,更新与软删除类似,以追加方式实现 | high |
| DolphinDB 更新方式 | 基础方式与 upsert | 基础更新方式为 update 语句;若基于键进行更新(键存在)或追加(键不存在),可使用 upsert! 函数 | high |
| 分布式表 update 与字段追加 | 限制 | 分布式表无法通过 update 直接追加字段,需要通过 addColumn | high |
| upsert! 去重写入示例 | keyColNames | keyColNames=["TradeDate", "TradeTime", "SecurityID"] | high |
| upsert! 对已存储重复键数据的处理 | 限制/行为 | 对数据库中已存在键值重复的数据,upsert! 不会去重;后续键值相同数据追加时只更新第一个命中键值的记录,其余相同键值记录不更新 | high |
| 延伸阅读 | SQL 编程链接 | SQL 标准化(docs.dolphindb.cn/.../std_sql_ddb.html);SQL 编写案例(docs.dolphindb.cn/.../ddb_sql_cases.html) | high |
| 延伸阅读 | 增删改查相关链接 | 数据库操作(docs.dolphindb.cn/.../db_distr_comp.html);分布式表数据更新原理和性能(docs.dolphindb.cn/.../dolphindb_update.html);软删除(docs.dolphindb.cn/.../soft_delete.html) | high |