检查处理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”步骤产生一空行,然后被更新为期望的输出。代码下载

时间: 2024-10-29 03:57:37

检查处理kettle数据流中的空行的相关文章

kettle spoon中“表输入”到“表输出”的乱码问题

数据库中的数据在不同的数据库中转换来装换去,由于不同库可能使用了不同的字符集,所以可能导致结果数据乱码问题.此次是在一个作业中跑数据,跑完数据前台数据显示出现乱码,检查了作业中的多有中间过程表,包括表输入的预览,表中的数据都是正常的,可想而知,问题肯定是处在"表输入"到"表输出"这个中间的转换环节上,根据能想到的,应该是字符集问题,为了更有保障的"表输入"和"表输出"的字符集相同,所以在表输入输出中.都添加了字符集的配置参数c

51Nod - 1786 数据流中的算法 - 众数

1786 数据流中的算法 - 众数 基准时间限制:1.5 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 数据流统计功能上线后,为51nod提升用户体验做出了很大的贡献.但是新问题随之而来,夹克老爷还想知道在一个窗口内,访问次数最多用户(即窗口内的众数).如果有多个众数,取用户ID最小的一个.(窗口的意思是一个固定长度的区间!) (因为数据流是实时的.在线的,所以不允许使用离线算法^_^) Input 第一行为整数n, k.(1 <= n <= 5 * 10^6,1 <

[剑指Offer] 62.数据流中的中位数

题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值.如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值. 1 class Solution { 2 public: 3 vector<int> vec; 4 void Insert(int num) 5 { 6 vec.push_back(num); 7 } 8 9 double GetMedian() 10 { 11 sort(vec.begin(),v

剑指offer(六十三)之数据流中的中位数

题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值.如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值. 代码: import java.util.*; public class Solution { ArrayList<Integer> al = new ArrayList<Integer>(); public void Insert(Integer num) { al.add(num);

让你提前认识软件开发(30):数据库脚本中的空行与空格

第2部分 数据库SQL语言 数据库脚本中的空行与空格 在数据库脚本中,空行与空格起着"锦上添花"的作用.恰当地使用它们,可以提高代码的规范性及可阅读性,进而提升数据库的编程效率. 1. 空行 空行起着分隔脚本段落的作用,适当的空行可以使脚本的布局更加的清晰.空行的作用有以下几个:         (1) 用于分隔两个数据表的创建脚本 示例: create table tb_example1 (         [表内容实现代码] ) go -- 空行 create table tb_e

剑指offer63:数据流中的中位数

题目描述: 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值.如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值. 本题最开始简单的理解为求中位数,使用的是快排的思想,当数据元素为奇数个时,求第n/2大的数,当元素个数为偶数时,先求n/2个数,然后对右边的求出一个最小值. 看了别人的做法,发现应该把这道题理解为一个在线算法题.关键是使用两个堆,最大化堆存储前n/2个数,最小化堆存储后n/2个数,当元素个数为偶数个

数据流中的中位数

如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值.如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值. import java.util.*; public class Solution { private int count = 0; private PriorityQueue<Integer> minHeap = new PriorityQueue<>(); private PriorityQu

数据流中的中位数-剑指Offer

数据流中的中位数 题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值.如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值. 思路 我们可以用数组存,每次取中位数时需要排序 我们也可以用平衡二叉树存,不过构造树的过程很复杂 我们也可以用大小堆存,不过也不简单 最后我选择用java里现成的ArrayList存,用Collections.sort()方法排序 代码 import java.util.ArrayL

Asp数据库连接出错,请检查Conn.asp文件中的数据库参数设置

Asp数据库连接出错,请检查Conn.asp文件中的数据库参数设置 解决办法: IIS-本地计算机-应用程序池-DefaultAppPool(右键)-高级设置将"启用32位应用程序"设置为true