admin管理员组文章数量:1037775
告别数据库束缚!用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 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://it.en369.cn/jiaocheng/1748250892a2275362.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论