环球科技在此|的 SQL 应用方案,esProc( 二 )
read函数可参考http://doc.raqsoft.com/esproc/func/read.html
跳过空行
有些文件存在空行 , 需要跳过才能使用 。 处理这种情况的一般思路是:在SQL中嵌入SPL语句 , 用SPL语句读入文件 , 查询出有用的数据行 。
最简单的情况是首行数据有效(可以用import函数解析成二维表) , 而首行之后不定的位置存在空行 。 这样文件可用以下SQL查询:
$select*from{file(''sOrderb.txt'').import@t().select(#1)}
代码中第二个select是SPL的查询函数 , select(#1)表示第1个字段不为空 。 可以用该函数筛选更复杂的数据行 , 而不仅仅是空行 。 函数select参考http://doc.raqsoft.com/esproc/func/select.html
如果首行数据无效 , 就不能用import函数解析成二维表了 , 这种情况下要用read函数读成行数据 , 找到有效数据后 , 再转为二维表 。 比如前3行无效 , 正式数据从第4行开始 , SQL代码为:
$select*from{file(''sOrderb.txt'').read@n().to(4:).concat(''rn'').import@t()}
代码中to(4:)表示取第4行直到结尾 , 即有效数据 。 concat(''rn'')表示将多行数据拼成一个大字符串 , 行之间用回车换行符连接 。 Import函数可将字符串转为二维表 。
更复杂的情况下 , 文件在任意位置都可能存在空行 , 这时要用SPL的select函数进行一般查询 , 代码如下:
$select*from{file(''sOrderb.txt'').read@n().select(~!='''').concat(''rn'').import@t()}whereClient='TAS'
数据源为SPL中间计算结果
从前面例子可以看出 , 有些文件不够规范 , 需要用较长的SPL代码去解析文件 。 SPL代码太长 , 就无法利用网格代码的优势 , 不仅影响阅读代码 , 且不方便查错改错 。 为了充分利用网格代码的优势 , esProcSQL允许将任意的SPL中间计算结果作为数据源 。
比如“文件在任意位置都可能存在空行”这个例子 , 可以改用下面的代码:
文章图片
任意的SPL中间结果都可以作为SQL的数据源 , 这就给SQL语句提供了无限的可能性 , 包括复杂的文件解析、特殊数据源、大文件计算、循环判断、多源混算等等 。
数据源为Excel粘贴而来的数据
把Excel文件当数据源是SQL的基本用法 , 也可以利用SPL , 把Excel粘贴而来的数据当做数据源 。
比如Excel存储着学生成绩 , 如下图:
文章图片
首先在Excel中选定A1:D10 , 连带列名一起复制粘贴到esProc脚本的A1单元格 , 再编写SPL代码 , 最后编写SQL 。 如下图:
文章图片
注意 , 一定要进入A1格的编辑状态才能进行复制 , 不然会把剪贴板的内容填进一大片格子 , 虽然也有办法进行计算 , 但占有区域太大 , 会影响代码布局 。
多行记录
多行记录属于格式不规范的文件 , 比如下面的文件每三行代表一条记录 , 第一条记录是:26TAS12142.42009-08-05 。
文章图片
下面使用SPL将该文件整理成规范二维表 , 再用作SQL数据源 , 代码如下:
文章图片
多源混算
利用SPL语言 , 可以在SQL中实现不同数据源之间的混合计算 。
比如Oracle的sales表存放员工的销售订单 , excel文件emp.xlsx存放各部门的员工信息 , 需要计算每个部门的销售额 , 可使用如下代码:
- 广州“人才+科技创新”亿元补贴获得者揭晓
- 中国最低调科技企业,连续10年全球第一,却被误认为是国外品牌
- 科技改变未来,未来快递员也会失业,只有驿站没有快递员
- 睿沃科技王琦:三年打造出行业独角兽,智慧酒店领域再添新样板
- 传统与科技的融合,哈苏907X 50C开箱
- 宁夏举办第35届青少年科技创新大赛机器人竞赛项目
- 河北2020科技成果直通车“开进”邯郸
- 出门问问荣获“吴文俊人工智能科技进步奖”
- 每日科技名词|数据权利
- 信也科技再攀科研高峰:复杂网络研究成果登上国际顶级期刊IEEE TKDE