前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >esProc SPL 相当于有了 Python 加持的 DuckDB

esProc SPL 相当于有了 Python 加持的 DuckDB

原创
作者头像
用户11520468
发布2025-03-10 17:23:11
发布2025-03-10 17:23:11
3800
代码可运行
举报
运行总次数:0
代码可运行

对于桌面数据分析用户,如果说 DuckDB 是轻巧灵活的 "SQL 瑞士军刀",那 esProc SPL 简直就是自带 Python 技能的 "全能工具箱",既保留 SQL 的便捷,又突破 SQL 的天花板。

和 DuckDB 一样,esProc SPL 对文件处理的支持相当到位。CSV、Excel 这类常见格式直接当数据库用,直接就能跑 SQL。比如查个销售数据:

代码语言:javascript
代码运行次数:0
复制
$SELECT region, SUM(amount) FROM sales.csv GROUP BY region

这种轻量级操作手到擒来。和 DuckDB 类似,esProc 也支持数据的二进制化,不过是存成文件的,压缩比很好,加载百万行数据秒开,比直接读 CSV 快三倍不止。

esProc 的 SQL 目前不支持窗口函数,不如 DuckDB 完善。不过 esProc 有个杀手锏是它的原生语言 SPL,处理复杂任务要比 SQL 简单很多,其实也用不着再写挠头的窗口函数了。 比如给各省销售额 Top3 的销售员发奖金的计算。用 SQL 得写多层嵌套:

代码语言:javascript
代码运行次数:0
复制
WITH ranked_sales AS (
  SELECT province, salesman, amount,
    ROW_NUMBER() OVER(PARTITION BY province ORDER BY amount DESC) as rank
  FROM sales
)
SELECT * FROM ranked_sales WHERE rank <=3

换 SPL 就直白得多:

代码语言:javascript
代码运行次数:0
复制
sales.groups(province;top(-3;amount))

这种任务用 SQL 还能写出来,如果再难一点,比如要算“客户连续购买天数超过 5 天时,自动触发积分翻倍奖励”,恐怕就干瞪眼了。涉及流程控制,想在 SQL 里搞个循环,根据条件动态调整计算逻辑,对不起,SQL 的 IF 和 LOOP 弱得跟摆设一样,绕来绕去费劲写出来的代码 3 天以后自己都看不懂。所以 Duckdb 经常要依靠 Python。

DuckDB 的 Python 接口做得非常流畅,但组合使用时还是会有分裂感:SQL 查完数据读出到 DataFrame,完事儿可能又得写回数据库。两套体系,编写和调试都不一样,不仅思维需要切换,左右横跳也难受。就像在川菜馆点牛排,不是不行,就是别扭。 而 esProc SPL 则直接把 Python 的核心能力内置了。 上面”连买 5 天”的计算用 SPL 写:

A

1

$SELECT * FROM orders.csv ODDER BY client,order_date

2

=A1.group(client).conj(~.run(streak = if(order_date[-1] && order_date==order_date[-1]+1, streak+1, 1)).select(streak>=5))

3

=A2.groups(client;"Doubling":bonus)

这代码其实比 Python 还要更简洁。

有完善计算能力、支持过程计算、提供流程控制机制,esProc SPL 的能力超越了加装 Python 的 DuckDB。既有 SQL 的轻快,又有编程语言的灵活,还不用在多个工具间来回折腾。对于经常要处理复杂计算的桌面分析师来说,这可能是比 "SQL+Python" 组合更优雅的解法。毕竟,谁不想在一个窗口里就搞定所有累活呢?

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档