设为首页 加入收藏

TOP

kettle中访问前一行数据
2015-07-24 10:45:47 来源: 作者: 【 】 浏览:1
Tags:kettle 访问 一行数据

kettle中访问前一行数据

在kettle中,当需要访问数据流前一行数据时,很多人都是用java script步骤的特性;实际上没有必要,不是说java script步骤不好,主要是性能低,同时也增加了复杂度,因为写代码让java script步骤难以理解,最好是使用kettle标准步骤实现。我们的原则是代码最小化,过程轻松。

(The Analytic Query Step)分析查询步骤

TheAnalytic Query 步骤可以查找数据流中的前面行或后面行,并且取值到当前行,很多场合是非常有用的,但是我感觉通常被开发者忽略。在“statistics”(统计)分类里有该步骤,下面的章节展示如何使用。

需求场景:计算库存之和

假设需要计算数据流中某字段的累计和,如库存和。原始数据是针对每个货物的交易信息,导致库存增加或减少,交易是按照日期排序。需要计算每次交易后当前库存量的值,并作为一个新字段保存,结果如下图所示:

\

A、B、C列是输入,列D是通过转换步骤计算出来的。

一种解决方法基于“Analytic Query”和“java script modified Value”步骤

该思路是通过简短的javasript代码去实现,记录当前产品的库存,然后增加交易值,并在新字段中保存结果。如果数据流是按照产品和日期排序,需要针对当前产品增加一个库存计数器,当前产品是新产品(相对前一行),则计数器被置为1,否则为0。通常情况很多人通过java script代码访问前一行,这种方法并不可取,除了java script步骤外,还有“Analytic Query”步骤。本例中java script步骤仅仅根据新字段值判断是否为新的产品,尽量保持java script步骤简洁,可以减少错误产生。

这里是解决方法,点击下载

\

首先读取数据并按照产品和日期排序,然后前一行产品值增加到“prev_product”字段中,接下来的步骤是和当前产品进行比较,并把标志值保存在“is_new_product”字段中,后面java script步骤使用之前的信息计算就变得非常简单了。

java script代码如下:

var stock;

if (is_new_product ==1){

stock = 0;

}?

stock += delta;

为了使结果更直观,最后两个步骤是去除辅助字段并安装日期和产品排序。我们可以通过右击每个步骤,通过查看输出步骤,确认每个步骤的输出字段情况。

更简单的方法:无脚步解决方案

使用“group by”步骤,根据输入分组计算和,在本场景中,比使用“AnalyticQuery”步骤和java script步骤更有优势。

\

无脚步解决方案代码下载

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇UpgradeVer4.3.xfrom4.2.x 下一篇输入一行字符,分别统计出其中英文..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Asus Armoury Crate (2025-12-26 02:52:33)
·WindowsFX (LinuxFX) (2025-12-26 02:52:30)
·[ Linux运维学习 ] (2025-12-26 02:52:27)
·HTTPS 详解一:附带 (2025-12-26 02:20:37)
·TCP/IP协议到底在讲 (2025-12-26 02:20:34)