当前位置: 首页 > news >正文

告别数据库束缚!用esProc在 csv 文件上执行 SQL

esProc SPL 支持简单 SQL,可以直接在 csv 等结构化文本文件上执行 SQL 语句,这样,不用数据库也可以用 SQL 计算了。

先下载 esProc SPL:免费下载

不想折腾源代码的话,可以用标准版,找到相应版本下载后安装即可。

准备好一个格式标准的 csv 文件。

0png

打开 esProc IDE,新建脚本,在 A1 格写 SQL:

$select * from d:/Orders.csv

注意前面的 $ 表示这句是 SQL,否则缺省认为是原生的 SPL 语句。

按 Ctrl-F9 执行,在右边可以看到,文件被读成数据表的形式:

1png


SPL 代码写在这些单元格中,每个格执行完后就会有个值,在右边可以实时看到,这样非常便于调试。

TAB 分隔的 txt 也一样可以支持,比如这个文件:

3png


在 A2 中写入:

$select * from d:/Orders.txt

并按 Alt-Enter 执行该格,esProc IDE 允许单步执行某一条语句,这样特别方便交互式数据分析。
右边会看到同样的结果:

4png


esProc 的 SQL 认为 txt 是 TAB 分隔的,csv 是逗号分隔,会根据扩展名自动处理。如果扩展名写错就可能读出错误的结果。

有些文件没有标题行:

5png


这里需要用 SPL 原生语法才能读出来,在 A3 中写:

$select * from {file("d:/OrdersNT.csv").import@c()}

其中 {…} 是 SPL 原生语法,表示读取文本文件,没有标题行,分隔符是逗号。
执行后可以可看到结果:

6png


esProc 将自动用序号表示列名。
类似地,不同分隔符的文本,也可以用 SPL 原生语法读出。

读取之后再试试计算,先看 WHERE,在 A4 中写:

$select * from d:/Orders.csv where Amount>=100 and Client like '%s%'

执行后的结果:

7png


把 Amount 大于 100 并且 Client 包含 s 的记录过滤了出来。

日期上的运算:

A5:$select * from d:/Orders.csv where (OrderDate<date('2020-01-01') and Amount<=100) or (OrderDate>=date('2020-12-31') and Amount>100)

8png


CASE WHEN 也支持:

A6: $select case year(OrderDate) when 2010 then 'this year' when 2010 then 'last year' else 'previous years' end from d:/Orders.csv

9png


再看看 GROUP BY:

A7:$select Client,year(OrderDate) y,sum(Amount) amt from d:/Orders.csv group by Client,year(OrderDate)

10png


再加个 HAVING:

A8:$select Client,year(OrderDate) y,sum(Amount) amt from d:/Orders.csv 
group by Client,year(OrderDate) having sum(Amount)>1000

JOIN 语句也不在话下:

A9: $select o.OrderId,o.Client,e.Name e.Dept,e.EId from d:/Orders.csv o 
left join d:/Emp.csv e on o.SellerId=e.Eid

12png


看起来支持得还挺全面,官方号称是支持到 SQL92,连 WITH 也可以无拘无束,但是还不支持窗口函数。不过问题也不大,窗口函数写起来本来也很繁琐,esProc 的原生 SPL 语法要来比窗口函数简单多了,也就没太大必要再支持窗口函数了。

esProc 还可以命令行的方式执行 SQL,比如上面的 GROUP BY:

13png

除了文本文件,esProc 的 SQL 还支持 XLS\MongoDB\restful json 等数据源,用法都差不多,感兴趣者可移步乾学院。

相关文章:

  • 搭建主从服务器
  • K8S之QoS详解
  • oracle 基础知识之 多表查询
  • soul能用ip精准定位吗?ip属地准确吗
  • hot100算法刷题:二叉树的层序遍历
  • Spring Boot 核心知识点深度详解:自动化配置 (Auto-configuration) - 解锁 Spring Boot 的 “魔法”
  • 远程访问家里电脑上部署的Stable diffusion - 免费篇
  • error: Microsoft Visual C++ 14.0 or greater is required解决不需要安装到c盘等
  • Mybatis使用Druid连接池
  • 0x04.若依框架微服务开发(含AI模块运行)
  • Kotlin 中 let 方法的作用和使用场景
  • 人工智能助力家庭机器人:从清洁到陪伴的智能转型
  • ngx_http_conf_ctx_t
  • 【源码分析】Nacos实例注册流程分析-事件驱动框架
  • react实现虚拟列表
  • C#语法基础总结
  • C语言刷题第六章(下)
  • 神策数据接入 DeepSeek,AI 赋能数据分析与智能运营
  • 【华为OD-E卷 -122 字符统计及重排 100分(python、java、c++、js、c)】
  • repo init 错误 Permission denied (publickey)
  • 马上评|扩大高速免费救援范围,打消出行后顾之忧
  • 为治理商家“卷款跑路”“退卡难”,预付式消费司法解释5月起实施
  • 浦发银行一季度净利175.98亿增1.02%,不良率微降
  • 在差异中建共鸣,《20世纪美国文学思想研究》丛书出版
  • 程璧“自由生长”,刘卓辉“被旋律牵着走”
  • 文旅部:推动离境退税购物便利化有利于更多国内优质商品走出去