admin管理员组文章数量:1446760
告别数据库束缚!用esProc在 csv 文件上执行 SQL
esProc SPL 支持简单 SQL,可以直接在 csv 等结构化文本文件上执行 SQL 语句,这样,不用数据库也可以用 SQL 计算了。
先前往乾学院下载 esProc SPL
推荐用标准版,找到相应版本下载后安装即可。
准备好一个格式标准的 csv 文件。
打开 esProc IDE,新建脚本,在 A1 格写 SQL:
代码语言:javascript代码运行次数:0运行复制$select * from d:/Orders.csv
注意前面的 $ 表示这句是 SQL,否则缺省认为是原生的 SPL 语句。
按 Ctrl-F9 执行,在右边可以看到,文件被读成数据表的形式:
SPL 代码写在这些单元格中,每个格执行完后就会有个值,在右边可以实时看到,这样非常便于调试。
TAB 分隔的 txt 也一样可以支持,比如这个文件:
在 A2 中写入:
代码语言:javascript代码运行次数:0运行复制$select * from d:/Orders.txt
并按 Alt-Enter 执行该格,esProc IDE 允许单步执行某一条语句,这样特别方便交互式数据分析。 右边会看到同样的结果:
esProc 的 SQL 认为 txt 是 TAB 分隔的,csv 是逗号分隔,会根据扩展名自动处理。如果扩展名写错就可能读出错误的结果。
有些文件没有标题行:
这里需要用 SPL 原生语法才能读出来,在 A3 中写:
代码语言:javascript代码运行次数:0运行复制$select * from {file("d:/OrdersNT.csv").import@c()}
其中 {…} 是 SPL 原生语法,表示读取文本文件,没有标题行,分隔符是逗号。 执行后可以可看到结果:
esProc 将自动用序号表示列名。 类似地,不同分隔符的文本,也可以用 SPL 原生语法读出。
读取之后再试试计算,先看 WHERE,在 A4 中写:
代码语言:javascript代码运行次数:0运行复制$select * from d:/Orders.csv where Amount>=100 and Client like '%s%'
执行后的结果:
把 Amount 大于 100 并且 Client 包含 s 的记录过滤了出来。
日期上的运算:
代码语言:javascript代码运行次数:0运行复制A5:$select * from d:/Orders.csv where (OrderDate<date('2020-01-01') and Amount<=100) or (OrderDate>=date('2020-12-31') and Amount>100)
CASE WHEN 也支持:
代码语言:javascript代码运行次数:0运行复制A6: $select case year(OrderDate) when 2010 then 'this year' when 2010 then 'last year' else 'previous years' end from d:/Orders.csv
再看看 GROUP BY:
代码语言:javascript代码运行次数:0运行复制A7:$select Client,year(OrderDate) y,sum(Amount) amt from d:/Orders.csv group by Client,year(OrderDate)
再加个 HAVING:
代码语言:javascript代码运行次数:0运行复制A8:$select Client,year(OrderDate) y,sum(Amount) amt from d:/Orders.csv
group by Client,year(OrderDate) having sum(Amount)>1000
JOIN 语句也不在话下:
代码语言:javascript代码运行次数:0运行复制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
看起来支持得还挺全面,官方号称是支持到 SQL92,连 WITH 也可以无拘无束,但是还不支持窗口函数。不过问题也不大,窗口函数写起来本来也很繁琐,esProc 的原生 SPL 语法要来比窗口函数简单多了,也就没太大必要再支持窗口函数了。
esProc 还可以命令行的方式执行 SQL,比如上面的 GROUP BY:
除了文本文件,esProc 的 SQL 还支持 XLS\MongoDB\restful json 等数据源,用法都差不多,感兴趣者可移步乾学院社区。
本文标签: 告别数据库束缚!用esProc在 csv 文件上执行 SQL
版权声明:本文标题:告别数据库束缚!用esProc在 csv 文件上执行 SQL 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1748250895a2832386.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论