欢迎投稿

今日深度:

检查处理kettle数据流中的空行,kettle数据流

检查处理kettle数据流中的空行,kettle数据流




检查处理kettle数据流中的空行

 

ETL处理过程中,有时需要生成数据,但是却没有输入数据,这可能有一些问题,所以通常需要ETL数据流产生一个空行数据;有时处理中需要一些聚集功能,则意味着当没有输入数据时,生成值为0;本文说明怎样检测并处理空行数据流。

示例场景

      假设有需求需要读取输入数据代表销售(有三个字段:product产品名称、items_sold销售量、turnover销售金额).ETL处理流程需要计算产品的销售总量及销售总额;这里的处理大概是:从输入文件中读取多行数据,然后使用聚集功能,产生期望的结果。

这种方法有缺陷,因为当没有输入数据时,不产生任何输出数据,在这个示例中,可以切换两个输入的连接线,测试结果。

第一种解决方案:使用group by步骤

     如果使用group by步骤实现聚集,你能设置总返回结果行,即使没有输入,启用“Alwaysgive back a result row”选项。如下图所示:

 

第二种解决方案:使用Detect empty stream步骤(检测空数据流)

     如果这个场景更复杂,字段更多,我们就需要有一般性的解决方案检测空数据流,我们使用“detect empty stream”步骤。连接输入源(源有可能为空)到空步骤,从空步骤拷贝数据到两个分支,其中“detect empty stream”步骤不处理有数据流的行情况,但是没有任何输入行数据时,则创建一行数据且所有字段值为空,该行表示没有数据。

     示例中,可以切换输入连接失效,则没有数据行输入,然后通过javascript步骤手工修改product=none”,item_sold=0,turnover=0.0;如下图所示,当输入数据确实为空时,“detect empty stream”步骤产生一空行,然后被更新为期望的输出。代码下载。

 

 

 


kettle 处理来自两个数据流的数据

使用Merge Join,按照你说的“同时在两个filed里面的数据被筛选出来”,应该使用内连接【INNER】方式,然后再在后续步骤中将自己需要的字段输出。
 

CGI多个提交命令怎办?

用C语言编写CGI程序
一、CGI概述
CGI(公用网关接口)规定了Web服务器调用其他可执行程序(CGI程序)的接口协议标准。Web服务器通过调用CGI程序实现和Web浏览器的交互,也就是CGI程序接受Web浏览器发送给Web服务器的信息,进行处理, 将响应结果再回送给Web服务器及Web浏览器。CGI程序一般完成Web网页中表单(Form)数据的处理、数据库查询和实现与传统应用系统的集成等工作。CGI程序可以用任何程序设计语言编写,如Shell脚本语言、Perl、Fortran、Pascal、C语言等。但是用C语言编写的CGI程序具有执行速度快、安全性高(因为C语言程序是编译执行且不可被修改)等特点。

CGI接口标准包括标准输入、环境变量、标准输出三部分。

1.标准输入

CGI程序像其他可执行程序一样,可通过标准输入(stdin)从Web服务器得到输入信息,如Form中的数据,这就是所谓的向CGI程序传递数据的 POST方法。这意味着在操作系统命令行状态可执行CGI程序,对CGI程序进行调试。POST方法是常用的方法,本文将以此方法为例,分析CGI程序设计的方法、过程和技巧。

2.环境变量

操作系统提供了许多环境变量,它们定义了程序的执行环境,应用程序可以存取它们。Web服务器和CGI接口又另外设置了自己的一些环境变量,用来向CGI 程序传递一些重要的参数。CGI的GET方法还通过 环境变量QUERY-STRING向CGI程序传递Form中的数据。

3.标准输出

CGI程序通过标准输出(stdout)将输出信息传送给Web服务器。传送给Web服务器的信息可以用各种格式,通常是以纯文本或者HTML文本的形式,这样我们就可以在命令行状态调试CGI程序,并且得到它们的输出。

下面是一个简单的CGI程序,它将HTML中Form的信息直接输出到We b浏览器。

引用

#include < stdio.h >
#include < stdib.h >
main()
{
int,i,n;
printf (〃Contenttype:text/plainnn〃);
n=0;
if(getenv(〃CONTENT-LENGTH〃))
n=atoi(getenv(CONTENT-LENGTH〃));
for (i=0;i putchar(getchar());
putchar (′n′);
fflush(stdout);
}

下面对此程序作一下简要的分析。
prinft (〃Contenttype:text/plainnn〃);
此行通过标准输出将字符串〃Contenttype:text/plainnn〃传送给Web服务器。它是一个MIME头信息,它告诉Web服务器随后的输出是以纯ASCII文本的形式。请注意在这个头信息中有两个新行符,这是因为Web服务器需要在实际的文本信息开始之前先看见一个空行。
if (getenv(〃CONTENT-LENGTH〃))
n=atoi (getenv(〃CONTENT-LENGTH〃));
此行首先检查环境变量CONTENT-LENGTH是否存在。Web服务器在调用使用POST方法的CGI程序时设置此环境变量,它的文本值表示Web服务器传送给CGI程序的输入中的字符数目,因此我们使用函数atoi(......余下全文>>
 

www.htsjk.Com true http://www.htsjk.com/shujukunews/3078.html NewsArticle 检查处理kettle数据流中的空行,kettle数据流 检查处理 kettle 数据流中的空行 ETL 处理过程中,有时需要生成数据,但是却没有输入数据,这可能有一些问题,所以通常需要 ETL 数据流产生...
相关文章
    暂无相关文章
评论暂时关闭