环球科技在此|的 SQL 应用方案,esProc

esProc的SQL功能支持文件计算、性能优化等独特功能 , 本文将总结桌面IDE、命令行等不同环境下SQL的用法 , 以及常用文件格式、特殊分隔符等多种应用方案 , 详情点击esProc的SQL应用方案
因为支持文件计算、性能优化等独特功能 , esProc的SQL功能深受大家喜爱 , 为了大家更方便地使用 , 下面将总结SQL的各类应用方案 。
基本用法
SQL的基本数据源为文本文件和Excel 。 文本文件有两种常见的分隔符 , 制表符分隔的文件一般以txt为扩展名 , 逗号分隔的文件通常以csv为扩展名 , esProc可凭借扩展名自动识别 。 Excel有两种不同的版本 , 格式较旧的xls文件和格式较新的xlsx文件 , esProc同样可凭扩展名自动识别 。
SQL的基本数据格式为带列名的二维表 , 比如下面的sales.txt:
环球科技在此|的 SQL 应用方案,esProc
文章图片
SQL的基本运行环境为网格脚本 , 在windows/linux下均可使用 。 在网格脚本中 , 可以编写/维护/执行多个SQL , 且点击不同的单元格可直接在右边查看计算结果 。 下面是一些例子:
环球科技在此|的 SQL 应用方案,esProc
文章图片
具体SQL写法不是本文重点 , 若感兴趣可参考[在文件上使用SQL查询的示例](http://c.raqsoft.com.cn/article/1600073770278)
在命令行执行SQL
不方便使用图形环境时 , 可以在命令行执行SQL 。 Windows下应使用esprocx.exe命令 , 例如:
esprocx.exe-rselect*fromOrder.txt
需要注意的是 , SQL在IDE中必须使用前导符号$ , 而命令行中可以省略该符号 。
Linux环境下应使用esprocx.sh命令 , 例如:
./esprocx.sh-rselect*fromOrder.txt
无列名的情况
有些文件没有列名(列标题) , 则可以将SPL语句嵌入SQL , 利用SPL的能力灵活处理列名 。 比如sOrderNT.txt部分数据如下:
环球科技在此|的 SQL 应用方案,esProc
文章图片
按第2列查询时 , SQL应写作:
$select*from{file(''sOrderNT.txt'').import()}where_2='TAS'
从SQL中可以看到 , 数据无列名时 , 则以''下划线+序号''为默认列名 , 第2列的列名就用_2表示 , 其他列以此类推 。 {}内是SPL语言 , 其中import函数可以读取格式更复杂的文件 , 详细用法参考http://doc.raqsoft.com/esproc/func/fimport.html
为了更直观地使用列名 , 可以先改列名再计算 。 传统的SQL写法是用子查询改列名 , 上面的SQL可改为:
环球科技在此|的 SQL 应用方案,esProc
文章图片
传统的子查询效率不高且阅读不便 , 使用SPL语句可以避免子查询 , 同时可以达到修改列名的目的:
环球科技在此|的 SQL 应用方案,esProc
文章图片
特殊分隔符
有些文件的分隔符不是常见的制表符或逗号 , 而是分号冒号等特殊符号 , 有时甚至用多个字符当分隔符 , 这种情况下应该用SPL语句中的import函数来指定分隔符 。
比如sep.txt的分隔符是双线|| , 则可以用下面的SQL来读取:
$select*from{file(''sep.txt'').import@t(;,''||'')}
无换行符
有些文件没有用回车换行区分记录 , 而是用其他符号 , 这样的文件整体呈现为一个大字符串 。 比如SOrderNL.txt的记录之间用|符号分隔:
环球科技在此|的 SQL 应用方案,esProc
文章图片
这种情况要把文件读为字符串 , 将|替换成回车换行 , 再用import函数解析为二维表 。
$select*from{replace(file(''sOrderNL.txt'').read(),''|'',''rn'').import@t()}


推荐阅读