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

简介: esProc SPL 是一款支持简单 SQL 的计算工具,可直接在结构化文本文件(如 CSV、TXT)上执行 SQL 语句,无需数据库即可完成数据分析。它根据文件扩展名自动识别分隔符,支持无标题行文件的原生语法读取。功能涵盖 WHERE、GROUP BY、JOIN、CASE WHEN 等 SQL92 标准语法(不支持窗口函数),并可通过命令行执行。此外,esProc 还兼容 XLS、MongoDB、RESTful JSON 等数据源,适合交互式数据分析与调试。下载标准版安装后,即可通过 esProc IDE 编写和运行脚本。

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

先前往乾学院下载 esProc SPL

推荐用标准版,找到相应版本下载后安装即可。

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

fa39874cd445bb6b21fa5c49612bb833_q.png

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

$select * from d:/Orders.csv

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

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

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

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

e8835c7e952e096885951f82052f7002_q.jpg

在 A2 中写入:

$select * from d:/Orders.txt

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

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

有些文件没有标题行:
84b9df46e7a669d4350d9e091a9484f8_q.jpg

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

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

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

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

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

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

执行后的结果:

e0caf6c298f8d531fe8de2b2ccace2dd_q.jpg

把 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)

d94576404f0a712197c8cfbd2d28f60f_q.jpg

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

c6b772d71cae39861319fca5392d7723_q.jpg

再看看 GROUP BY:

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

2fd16bf33222bd654ab524758b701fbe_q.jpg

再加个 HAVING:

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

b1639b9ba129fa8b30c5d9d2bbeca2a0_q.jpg

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

66f9d683d437fd96af8e44ebed592b00_q.jpg

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

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

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

相关文章
|
7月前
|
SQL 关系型数据库 MySQL
Python小技巧——将CSV文件导入到MySQL数据库
Python小技巧——将CSV文件导入到MySQL数据库
312 0
|
SQL 数据库 数据库管理
Qt操作Sqlite类封装,及命令行导入csv文件到Sqlite数据库
Qt操作Sqlite类封装,及命令行导入csv文件到Sqlite数据库
|
关系型数据库 MySQL 大数据
【大数据系列之MySQL】(二十一):Navicat读取本地csv文件到MySQL数据库中
【大数据系列之MySQL】(二十一):Navicat读取本地csv文件到MySQL数据库中
642 0
【大数据系列之MySQL】(二十一):Navicat读取本地csv文件到MySQL数据库中
|
存储 SQL 安全
Python案例教学之Mysql数据库的数据导入与导出 -CSV文件【第九课】
将csv数据导入数据库时出现‘The used command is not allowed with this MySQL version’错误,网上说是从本地导入文件的参数没有打开,在mysql.data升级之后,为了安全考虑,默认不允许加载本地文件数据。查找了好几个方法嫌麻烦,突然想起了老师原来讲过! 只需在连接数据库时添加local_infile:1就可以解决。
723 1
Python案例教学之Mysql数据库的数据导入与导出 -CSV文件【第九课】
|
关系型数据库 Java MySQL
Spring Batch示例: 读取CSV文件并写入MySQL数据库
Spring Batch示例: 读取CSV文件并写入MySQL数据库 GitHub版本: https://github.com/kimmking/SpringBatchReferenceCN/blob/master/01_introduction/Spring_Batch_MySQL.
3051 0
|
数据库
从CSV文件中迁移用户邮箱到目标数据库
为了挤出“白空间”,只好迁来迁去了。 为了120G的空间,那必须找脚本来实现了。 http://mikecel79.wordpress.com/2012/10/03/exchange-2010-mailbox-moves-from-csv-file/ 至于如何生成CSV文件,网上更是一大把。
1005 0
|
1月前
|
关系型数据库 MySQL Java
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
|
1月前
|
关系型数据库 MySQL 数据库连接
docker拉取MySQL后数据库连接失败解决方案
通过以上方法,可以解决Docker中拉取MySQL镜像后数据库连接失败的常见问题。关键步骤包括确保容器正确启动、配置正确的环境变量、合理设置网络和权限,以及检查主机防火墙设置等。通过逐步排查,可以快速定位并解决连接问题,确保MySQL服务的正常使用。
291 82
|
1天前
|
负载均衡 算法 关系型数据库
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。
|
6天前
|
SQL 关系型数据库 MySQL
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL 数据库 SQL 语句调优方法详解(2-1)
本文深入介绍 MySQL 数据库 SQL 语句调优方法。涵盖分析查询执行计划,如使用 EXPLAIN 命令及理解关键指标;优化查询语句结构,包括避免子查询、减少函数使用、合理用索引列及避免 “OR”。还介绍了索引类型知识,如 B 树索引、哈希索引等。结合与 MySQL 数据库课程设计相关文章,强调 SQL 语句调优重要性。为提升数据库性能提供实用方法,适合数据库管理员和开发人员。

热门文章

最新文章