dolphindb-sql-programminglisted
Install: claude install-skill dolphindb/DolphinX_Skill
# DolphinDB SQL 编程
## 使用流程
按以下流程使用本 skill:
1. 判断输入是否属于 DolphinDB / DolphinScript SQL。若不是,回复“请提供 DolphinDB SQL 或 DolphinScript 表查询代码。”
2. 明确任务意图:过滤与分区、时序关联与窗口、分组与组内计算、结果整形、SQL 元编程、执行语义或性能优化。
3. 明确输出形态:每组一行、明细等长、累计分组、二维透视、左表等长、数组向量、动态查询结果或更新删除结果。
4. 依据本文件规则选择 SQL 入口。需要案例时,阅读对应 `references/scene-*.md`。
5. 审查代码时,按各章节的反例和检查清单确认是否需要改写。若代码已符合规则,直接说明无需改写。
## 总规��
### 规则 01:DolphinDB SQL 不是标准 SQL 的简单扩展
DolphinDB SQL 与 DolphinScript 变量、函数、向量函数、时序连接、数组向量、元编程和分布式执行机制共同工作。不要用普通 SQL 惯性替代 `context by`、`cgroup by`、`pivot by`、`aj/wj/pwj` 等 DolphinDB 专用入口。
### 规则 02:数据已在表中时,优先保留 SQL 承载层
过滤、投影、分组、关联、窗口、透视、更新、删除和结果整形都可在 SQL 内完成。过早取出列向量、子表或中间表,会增加扫描、合并和重新分组成本。
### 规则 03:SQL 可直接衔接 DolphinScript 变量和函数
SQL 可引用脚本变量、表对象、自定义函数和内置函数,也可作为变量值、函数参数和返回值。未使用 catalog 时,分布式表应通过 `loadTable` 等函数取得表对象后查询。
### 规则 04:标准 SQL 写法可用,但写入方式需判断
DolphinDB 支持 `create table`、`insert into`、`select` 等标准 SQL 风格,也支持 catalog 访问分布式表。分布式表大量写入时,一般优先评估 `append!` 或 `tableInsert`,不要默认使用 `insert into`。
### 规则 05:先按输出形态选择分组入口
每组一行使用 `group by`;明细等长输出使用 `context by`;累计分组输出使用 `cgroup by`;二维透视使用 `pivot by`。入口选择应由输出形态决定,而不是只看是否存在分组键。
### 规则 06:过滤阶段优先缩小数据范围
能用键集合过滤时,优先 `exec key from dim where ...` 得到键向量,再用 `where key in keys` 过滤主表。仅为筛选主表而做 `join`,通常会引入不必要的连接成本。
### 规则 07:`where` 条件需要区分普通条件和序列条件
普通条件可使用逗号或 `and`,并优先放置高选择性条件。条件包含 `deltas`、`ratios`、`ffill`、`move`、`prev`、`cumsum` 等序列相关函数时,应使用 `and`,避免逗号的逐层过滤改变序列上下文。
### 规则 08:分布式查询必须检查分区剪枝
分布式查询应尽量使用分区列或系统可识别的分区表达式。不要对分区列使用字符串格式化、任意算术、链式比较,或使用非分区时间列期待分区剪枝。分布式查询的 `where` 子句不应使