SQL 的后计算脚本( 二 )
具体 SQL 如下:
本文插图
这段 SQL 并不算很长 , 但嵌套了四层 , 所用技巧古怪难懂 , 一般人很难想出这样的代码 。
用 JAVA 实现时 , 就可以回归自然思路:
本文插图
后面那段代码就是前面讲述的思路 , 只要一层循环就可以完成了 。
然而 , 我们也发现 , Java 写出的这段代码 , 虽然思路简单 , 难度不大 , 但显然代码很冗长 。
这个问题的复杂度并不高 , 还没涉及到常见的分组、连接等结构化数据计算 , 否则代码量将更为惊人 , 限于篇幅 , 就不再用 JAVA 举例了 。
在多样性数据、优化性能、处理大数据等高级功能方面 , JAVA 的特点同样是“能实现 , 但太繁琐” , 这里也不再赘述 。
JAVA 是个优秀的企业级通用语言 , 但通用的另一层意思往往是不专业 , 换句话说 , JAVA 缺乏专业的结构化计算类库 , 代码冗长繁琐 , 算不上理想的 SQL 后计算脚本 。
Python pandas
Python 有简捷的语法 , 还拥有众多的第三方函数库 , 其中就有服务于结构化计算的 Pandas 。 也正因为如此 , Pandas 常被用作 SQL 的后计算脚本 。
作为结构化计算函数库 , Pandas 简化 SQL 复杂运算的能力要比 JAVA 强很多 。
比如 , 同样的有序运算 “求最长连续上涨天数” , Pandas 代码是这样的:
本文插图
上述代码中 , Pandas 提供了用于结构化计算的数据结构 dataFrame , 这种数据结构天然带序号 , 在有序运算中可以简化代码 , 比 JAVA 更容易进行跨行取数 。 此外 , Pandas 对 SQL 取数的封装也很紧凑 , 比 JAVA 代码更加简短 。
再比如集合计算例子:一行拆分为多行 。 库表 tb 有 2 个字段 , 其中 ANOMALIES 存储以空格为分隔符的字符串 , 需将 ANOMALIES 按空格拆分 , 使每个 ID 字段对应一个成员 。
处理前的数据
本文插图
处理后的数据:
本文插图
Pandas 核心代码如下(省略数据库输入输出 , 下同):
本文插图
上述代码中 , Pandas 用集合函数将字符串直接拆分为 dataFrame , 再用集合函数将多个 dataFrame 直接合并 , 代码非常简练 。 JAVA 虽然可以实现类似的功能 , 但都要手工实现 , 代码要繁琐得多 。
作为结构化计算函数库 , Pandas 代码的确比 JAVA 简练 , 但这仅限于复杂度有限的情况下 , 如果复杂度进一步提高 , Pandas 代码也会变得冗长难懂 。
比如这个涉及集合计算 + 有序计算的例子:连续值班情况 。 库表 duty 记录着每日值班情况 , 一个人通常会持续值班几个工作日 , 之后再换人 , 现在请根据 duty 依次计算出每个人连续的值班情况 。 数据结构示意如下:
处理前(duty)
本文插图
处理后
本文插图
核心的 pandas 代码如下:
推荐阅读
- Intel|Intel超级GPU计算卡太恐怖了!63个小芯片合体、600W功耗
- 暴雪|70岁老玩家被《魔兽世界》封号 儿子回应:暴雪把他当成了脚本
- 黑洞|科学家计算出宇宙中黑洞数量:4000亿亿个
- 三星|准确率98%!三星全球首秀MRAM磁阻内存内计算
- NVIDIA|NVIDIA GTC 2022大会官宣:Hopper计算架构要来了
- 论文|2020中国卓越科技论文近50万篇:计算机等4大领域位列世界第一
- CPU处理器|曦智发布光子计算处理器PACE:1GHz频率、比GPU快数百倍
- 联想|上海交大杨元庆科学计算中心揭牌!算力中国高校第一
- IDC|仅剩十年!IDC称经典计算机将面临来自量子计算机的巨大挑战
- 大学生|5名大学生处置实验室漏水获奖12万:避免我国新一代量子计算机研发延误
