fantasist 写了: 2025年 10月 21日 13:57我给的sample code全部是纯python语法,除了那个.where(sql_query)只是举例说明非要按基本没什么人用的sql语法写也能运行而已。
你推荐polars没问题,但它主要也就是相对于pandas有更多perf优化,用法实际上大同小异,文档里完全没有推荐往语句里嵌sql:https://docs.pola.rs/user-guide/migrati ... -predicate你推荐sql估计是没体验过复杂analytical data transform pipeline的痛苦,比如这种屎山:
(SELECT max(c1) as max_c1, mean(c2) as avg_c2, c3
FROM table1
WHERE xxx
GROUPBY c3) AS t1,
(SELECT c1, count(c2) as cnt_c2, sum(coalesce(c3, NULL, 1)) as sum_c3
FROM table2
WHERE yyy
GROUPBY c1) AS t2,
SELECT t1.c3, t1.max_c1, t1.mean_c2, t2.cnt_c2, ...
FROM table1 join table2 on (t1.c3 = t2.c1)
WHERE ccc and ddd
ORDERBY ...一坨几百上千行的sql query,mix各种agg函数和coalesce,尤其是array与string操作非常不方便,看着瞎眼不说,随便改一点就出错要调半天。碰到复杂函数就会碰到framework dialect不兼容的问题,在SF上写的query跑到spark上运行不了,或者做不到一个query打通spark batch和flink streaming。实际可用性比能分步unit testing的python代码差几百条街。
还是看infra
大厂也用逻辑极其复杂的几百上千行的sql
性能好 灵活 快





