大数据分析语言DolphinDB脚本语言概述
本页概述 DolphinDB 脚本语言的定位、设计灵感,以及其支持的多种编程范式与大数据开发建模相关能力。
Source: https://dolphindb.cn/blogs/41
What this page covers
- 活动提示与报名入口信息
- 文章标题、作者与发布时间信息
- 脚本语言定位、设计灵感与总体特性
- 命令式编程的支持与使用建议
- 向量化编程、性能示例与 big array
- 函数化编程:纯函数、自定义函数、高阶函数与部分应用
- SQL 与时间序列扩展:融合、context by、各类 join 与扩展能力
技能认证特训营第二期报名入口
页面顶部包含活动提示信息,并提供限时报名链接。
- 技能认证特训营第二期处于“正式开启”状态。
- 提供“限时报名”的 URL 入口。
大数据分析语言DolphinDB脚本语言概述(标题与作者/日期)
本部分呈现文章标题,并给出作者署名与发布时间信息。
- 文章作者为 Junxi。
- 文章发布时间为 2021-05-20。
脚本语言定位与总体特性
介绍 DolphinDB 脚本语言的设计灵感来源,并概述其支持多种编程范式以服务大数据分析开发与建模。
- DolphinDB 脚本语言从 Python 和 SQL 汲取设计灵感。
- DolphinDB 支持多种编程范式(含命令式、向量化、函数化、SQL、RPC 与元编程)。
- 其语法与表达习惯被描述为与 Python 和 SQL 相似。
- 文中称该编程语言可满足数据科学家快速开发与建模需求。
命令式编程
本部分说明 DolphinDB 对命令式编程的支持,并讨论逐行处理大数据时的效率问题与使用建议,同时提供示例代码。
- DolphinDB 支持命令式编程。
- 命令式编程被描述为主要用于上层模块的处理与调度。
- 逐行处理大数据可能导致效率低下与性能下降。
- 建议在 DolphinDB 中用其他编程方式批量处理数据。
向量化编程与 big array
本部分介绍向量化编程的优势与性能示例,并说明向量化的连续内存限制,以及 big array 数据类型的作用。
- DolphinDB 支持向量化编程(类似 matlab、R)。
- 示例:for 循环相加长度 1000 万向量耗时 12341.043 ms。
- 示例:向量化相加长度 1000 万向量耗时 36.901 ms。
- 向量化通常需要将整个向量加载到连续内存。
- big array 可将不连续内存块组合为逻辑连续向量以提升可用性。
函数化编程(纯函数/自定义/高阶/部分应用/闭包)
本部分概述函数化编程能力(如纯函数、自定义函数、λ函数、高阶函数与部分应用等),并通过示例展示相关用法与约束。
- DolphinDB 支持纯函数、自定义函数、λ函数、高阶函数、部分应用与闭包等。
- 文中提到 DolphinDB 有 400 多个内置函数。
- 自定义函数时不能使用函数体外定义的变量(纯函数特性)。
- 示例使用 pivot、each、cross 等计算股票两两之间相关性。
- 部分应用可用于约束高阶函数中的参数要求。
- 部分应用可用于使函数保持状态(stateful)。
SQL 编程与时间序列扩展(融合、context by、join、其它扩展)
本部分说明 DolphinDB 对标准 SQL 的支持与面向时间序列分析的扩展,并强调脚本语言与 SQL 的融合,以及特定 join/扩展能力。
- DolphinDB 支持标准 SQL,并扩展 context by、pivot by、窗口函数、asof 连接与窗口连接等。
- 文中称脚本语言与 SQL 语言完全融合在一起。
- context by 被描述为语法更简洁、限制更少,可与 select 或 update 一起使用。
- asof join:右表缺少匹配时间记录时取该时间之前最近记录。
- 用户自定义函数无需编译、打包或部署即可在 SQL 中使用。
- 支持 Composite Column,将多个返回值输出到数据表的一行。
远程过程调用(RPC)与分布式计算框架(mr/imr)
本部分介绍 RPC 的特点,并展示 mr/imr 分布式计算函数与示例(如线性回归与近似中位数)。
- 内置函数与自定义函数都可通过 RPC 发送到其他节点运行。
- RPC 无需编译或部署,系统会自动序列化函数定义与所需数据。
- mr 用于基于 map-reduce 的分布式算法。
- imr 用于迭代的 map-reduce 分布式算法。
- mr/imr 仅需指定分布式数据源与核心函数(如 map、reduce、final)。
- 线性回归示例:mr 结果与内置 ols 的系数结果一致。
- 近似中位数示例:分布式结果与内置 med 的结果接近。
元编程与动态 SQL 生成(报表定制示例)
本部分介绍元编程能力,用于动态创建并执行函数调用表达式与 SQL 查询表达式,并给出定制报表示例。
- 支持动态创建表达式(函数调用表达式与 SQL 查询表达式)。
- 典型应用包括定制报表生成。
- 报表示例描述:输入数据表、字段名称与字段格式即可生成报表。
结语与相关资源(教程与多语言 API)
本部分给出对脚本语言定位的总结性描述,并提供教程链接与多语言 API 相关仓库链接。
- 文中将 DolphinDB 编程语言描述为“为数据分析而生”。
- 提供教程链接:DolphinDB脚本语言的混合范式编程。
- 提供多种编程 API(R、Python、Java、C# 等)。
- 列出 Java、Python(3 与 2.7)、C#、R API 的仓库链接。
Facts Index
| Entity | Attribute | Value | Confidence |
|---|---|---|---|
| 技能认证特训营第二期 | 状态 | 正式开启 | high |
| 限时报名 | URL | https://www.qingsuyun.com/h5/e/217471/5/ | high |
| 文章发布时间 | date | 2021-05-20 | high |
| 作者 | name | Junxi | high |
| DolphinDB 脚本语言 | 设计灵感来源 | 从流行的 Python 和 SQL 语言汲取灵感,设计了大数据处理脚本语言 | high |
| DolphinDB 编程语言 | 支持的编程范式 | 支持命令式编程、向量化编程、函数化编程、SQL 编程、远程过程调用编程(RPC)和元编程等多种编程范式 | high |
| DolphinDB 编程语言 | 语法与表达习惯相似性 | 语法和表达习惯与 Python 和 SQL 非常相似 | medium |
| 具备 Python/SQL 基础的用户 | 学习门槛 | 只要对 Python 和 SQL 有一定了解,就能轻松掌握 DolphinDB | low |
| kdb+ 的 q 语言 | 掌握难度对比 | 相对而言,掌握 kdb+ 的 q 语言难度要大得多 | low |
| 数据科学家 | 用途/满足需求 | DolphinDB 的编程语言能够满足数据科学家快速开发和建模的需求 | medium |
| DolphinDB 语言 | 特性 | 语言简洁灵活、表达能力强,提高开发效率;支持向量化计算和分布式计算,运行速度极快 | low |
| DolphinDB | 支持命令式编程 | 支持命令式编程 | high |
| DolphinDB 命令式编程 | 主要用途 | 主要用作上层模块的处理和调度 | high |
| 命令式逐行处理大数据 | 影响 | 逐行处理数据效率低下、性能下降 | medium |
| DolphinDB 使用建议 | 推荐做法 | 推荐在 DolphinDB 中使用其他编程方式来批量处理数据 | medium |
| DolphinDB | 支持向量化编程 | 支持向量化编程(类似 matlab、R) | high |
| kdb+ 的 q 语言 | 类型/特点 | q 语言也是向量处理语言,在复杂计算上性能和效率较高 | medium |
| DolphinDB 向量函数 | 优化对象 | 对很多算法进行了优化,例如对时间序列数据计算滑动窗口指标,提高向量函数效率 | medium |
| 长度为 1000 万的向量相加示例(for 循环) | 耗时 | Time elapsed: 12341.043 ms(约 12 秒) | high |
| 长度为 1000 万的向量相加示例(向量化) | 耗时 | Time elapsed: 36.901 ms(约 36 毫秒) | high |
| 向量化编程内存特性 | 限制 | 通常需要将整个向量加载到连续内存;若因内存碎片找不到连续内存,向量可能不可用 | high |
| big array 数据类型 | 作用 | 将物理上不连续的内存块组成逻辑上连续的向量,使非常大的向量也能在 DolphinDB 中使用,提高系统可用性 | high |
| DolphinDB | 函数化编程支持范围 | 支持纯函数、自定义函数、λ函数、高阶函数、部分应用和闭包等(大部分功能) | high |
| DolphinDB 内置函数数量 | count | 400 多个函数 | high |
| DolphinDB 自定义函数与纯函数特性 | 约束 | 自定义函数时不能使用函数体外定义的变量(纯函数特性) | high |
| 纯函数特性 | 效果 | 减少函数副作用,可大幅提高代码可读性和软件质量 | low |
| 高阶函数示例 | 使用的函数 | pivot、each、cross(配合 ratios、corr)用于计算股票两两之间相关性 | high |
| 部分应用(partial application) | 作用 | 可确保高阶函数中的函数参数符合要求;也可使函数保持状态(stateful) | high |
| DolphinDB 脚本语言 SQL 支持 | SQL 支持与扩展 | 不仅支持标准 SQL,还针对时间序列数据扩展了分组计算(context by)、数据透视(pivot by)、窗口函数、asof 连接和窗口连接等 | high |
| SQL 引擎表达能力 | 局限性 | 单纯的 SQL 引擎表达能力有限,难满足复杂数据分析和算法实现,影响开发效率 | medium |
| DolphinDB | 脚本语言与 SQL 关系 | 脚本语言与 SQL 语言完全融合在一起 | high |
| DolphinDB context by | 对比 window function 的特点 | 语法更简洁、限制更少,可与 select 或 update 一起使用 | high |
| asof join(aj) | 行为说明 | 当右表缺少匹配时间记录时,取右表中在该时间之前最近时间的记录 | high |
| window join(wj)示例 | 窗口范围 | 示例中在表 s 中选择 month 在 (2018.06M-3) 到 (2018.06M-1)(2018.03M 到 2018.05M)之间的记录计算 avg(wage) | high |
| asof join 和 window join | 应用领域 | 在金融分析领域有广泛应用;示例提及将交易表和报价表关联以计算个股交易成本 | medium |
| 参考链接 | Window Join 交易成本文章 URL | https://zhuanlan.zhihu.com/p/43170174 | high |
| DolphinDB SQL 扩展 | 自定义函数在 SQL 中使用 | 用户自定义函数无需编译、打包或部署,即可在 SQL 中使用 | high |
| Composite Column(组合字段) | 能力 | 支持组合字段,可将复杂分析函数的多个返回值输出到数据表的一行 | high |
| DolphinDB RPC | 优势 1 | 无论自定义函数还是内置函数,都可以通过 RPC 发送到其他节点运行;其他系统不能远程调用与自定义函数相关的函数 | medium |
| DolphinDB RPC | 优势 2 | 远程过程调用无需编译或部署;系统自动序列化函数定义和所需数据到远程节点 | high |
| DolphinDB RPC | 效果 | 数据科学家/分析师无需工程师配合编译部署即可在线使用,提高开发和分析效率 | low |
| 分布式计算函数 | 名称与用途 | mr 用于基于 map-reduce 的分布式算法;imr 用于迭代的 map-reduce 分布式算法 | high |
| mr/imr 使用方式 | 需要用户指定的内容 | 只需指定分布式数据源和定制核心函数(如 map、reduce、final 等) | high |
| 线性回归分布式示例 | 实现方式 | 通过自定义 myOLSMap、内置 reduce 函数(+)、自定义 myOLSFinal 与 mr 构建 myOLSEx,在分布式数据源上运行线性回归 | high |
| 线性回归系数结果一致性示例 | 结果 | myOLSEx 返回 [0.4991, 3.0001, -0.4996];内置 ols 也得到相同结果 | high |
| 近似中位数分布式示例 | 方法 | 使用 bucketCount 在各节点计算 bucket 计数并累加,定位中位数区间并迭代细分;因多次迭代使用 imr | high |
| 近似中位数示例(分布式 vs 内置 med) | 数值 | medEx(..., precision=0.001) 得到 -0.052973;内置 med(y) 得到 -0.052947 | high |
| 元编程 | 能力 | 支持动态创建表达式(函数调用表达式与 SQL 查询表达式) | high |
| 元编程 | 典型应用 | 定制报表:输入数据表、字段名称、字段格式即可生成报表 | medium |
| DolphinDB 编程语言定位 | 描述 | 为数据分析而生,具备处理海量数据能力,功能强大,简单易用 | low |
| 教程链接:DolphinDB脚本语言的混合范式编程 | URL | https://link.zhihu.com/?target=https%3A//github.com/dolphindb/Tutorials_CN/blob/master/hybrid_programming_paradigms.md | high |
| DolphinDB 编程 API | 支持语言 | R、Python、Java、C# 等(多种编程 API) | high |
| Java API | 仓库 URL | https://link.zhihu.com/?target=https%3A//github.com/dolphindb/api-java | high |
| Python 3 API | 仓库 URL | https://link.zhihu.com/?target=https%3A//github.com/dolphindb/api-python3 | high |
| Python 2.7 API | 仓库 URL | https://link.zhihu.com/?target=https%3A//github.com/dolphindb/api-python | high |
| C# API | 仓库 URL | https://link.zhihu.com/?target=https%3A//github.com/dolphindb/api-csharp | high |
| R API | 仓库 URL | https://link.zhihu.com/?target=https%3A//github.com/dolphindb/api-r | high |