Kettle循环结果集中的数据并传入SQL组件【或转换】里面

news2024/11/15 19:39:44

简介:在尝试使用了结果集的Demo循环后,进入到生产还是有一点问题的,以下是各个组件的分解解释、遇到的问题,以及解决问题的思路,最后文章的最后会把完整的Ktr文件放出来。记得收藏点赞喔!

先来看张图~来自老大的压迫感!有压力才有动力!!!

🏆1、JOB拆解

1、首先,这个是本次JOB的一个主要实现的功能,伙伴们无需过多关注step3、step4是什么东西,只需要简单理解为,这个JOB是ads层供应商等级数据的一个加工,step1,删除本月数据,step2初始化供应商为C等级,step3 修改符合条件的供应商等级为B,step4,修改符合条件的供应商等级为A。其中本次作业的三个参数分别是tenant_id(租户),brand_id(品牌),date(时间)。

2、适合人群:

  • 有Kettle基础(硬性要求),
  • 有且用过变量知识最佳(没用过变量也没关系,这个JOB可自行下载下来,学习)

3、JOB核心:动态查询数据库中某张表某个字段的值,将这些值设置为变量,循环作业,实现数据加工的目的

JOB一览图(公开简化版)

灰色是不重要的步骤,根据自己的业务场景来,我这个简化版只是尽可能的复现生产环境的业务,仅此而已。红色加粗部分是JavaScript的核心代码

001_now_month

delete-nowMonth(自己的逻辑代码)

初始化数据(自己的逻辑代码)

002_select_Brand

获取上一个传递的结果

var prevRow=previous_result.getRows();//获取上一个传递的结果
if (prevRow == null &&(prevRow.size()=0))
{
    false;

}else{
    parent_job.setVariable("tables", prevRow);//ArrayList存储表名变量,以数组形式保存入table1,table2
    parent_job.setVariable("size", prevRow.size());//存储执行表的总数量
    parent_job.setVariable("i", -1);//循环控制变量  此处之所以是-1 不是0 是为了获取下标为0的品牌数据
    parent_job.setVariable("brand_code", prevRow.get(0).getString("brand_code", ""));
    true;

}

检验字段的值

获取变量自增处理

var prevRow=previous_result.getRows();
var size = new Number(parent_job.getVariable("size"));
var i = new Number(parent_job.getVariable("i"))+1;
if(i<size){
    parent_job.setVariable("brand_code", prevRow.get(i).getString("brand_code", ""));
}
parent_job.setVariable("i",i);
true;

写日志

日志是调试的关键步骤

自己的逻辑代码

🏆2、JOB文件获取

V~老王玩编程 关键字:Kettle循环结果集

授之以鱼不如授之以渔,有兴趣的伙伴可以继续往下看,如果文章存在不合理需要补充的,欢迎指出修复,一起成长,一起进步!

🏆3、BUG记录及解决思路

技术永远是思路为先,你要先知道自己做什么,想要什么,就算不会,问别人问题,你也知道如何描述,如果思路不清楚,都不知道自己要干什么,是最可怕的。

⭐️3.1、第一个BUG

当时整理的下需求,自己处理的方式,以及想要提问的地方,想要什么结果。

需求

实现

问题

手动跑SQL脚本跑出来的数据 和JOB跑出来的数据不一致

这是手动跑出来的数据

有A 有B等级的数据

以下是JOB描述

job文件能获取到参数的值

这是SQL脚本中的设置

但是JOB跑出来的数据 全是供应商等级C 没有B

结论:感觉参数没有生效 但是不知道为什么

⭐️3.2、第一次解决

思路及解决方案:将Kettle日志调整为详细日志,看SQL脚本的执行语句。

发现问题:这是brand_code参数没有获取到值

好的,那么将品牌获取不到变量的问题修复掉(解决问题的ktr版本已经丢失,所以这里只记录解决过程),模糊记得当时是这么处理的,不重要,后面也是把这个方法替换掉了。

⭐️3.3、第二个BUG

将brand_code参数修复好以后,发现我又7个品牌的变量只给我设置一个100000207 品牌的 其他品牌变量丢掉了,也就是说到这里我的JOB获取到的品牌变量有且只有100000207 。201、202、203、204、205、206都没有

这里有一个大胆的猜想:就是从结果获取记录——设置变量 即使勾选了执行每一行输入行,默认只会输出最后一个值,而不是所有的值。

⭐️3.4、第二次解决

改变思路,既然转换里面的执行每一个输入行没有用了,虽然在Deme测试里面是没有问题的,但是这里一样的设置死活不生效的话,那就改变思路,使用JavaScript循环方式:

从这种JOB

升级为下图这种

⭐️3.5、第三个BUG

好,这是最后一个bug了,就是说现在是有一个品牌重复,能获取到6个品牌了,差一个品牌

⭐️3.6、第三次解决

思路及解决方案:品牌获取少了100000201,JavaScript的语法是用get获取数组的下标,如果少一个的话,就是下标0的品牌数据没有获取到,我将下标初始化从0改为-1,就可以了。

至此,思路及解决方案处理完毕!

🏆4、总结

  1. 遇到问题首先看日志,很多时候,答案往往在日志里面
  2. 遇到问题不要慌,大胆假设大胆猜想,然后细心的去推理是否符合逻辑
  3. 遇到自己一个小时搞不定的问题,首先要和老大沟通风险,评估风险,并给出最坏的解决方案
  4. 遇到自己一个小时搞不定的问题,可以尝试换个思路,或者是向别人寻求帮助,很多时候,你问问题之前,肯定要自己先顺一遍,才能给别人讲清除,那么就是自己给自己讲问题,顺思路的时候,往往就能发现问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1133463.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【疯狂Java】数组

1、一维数组 (1)初始化 ①静态初始化&#xff1a;只指定元素&#xff0c;不指定长度 new 类型[] {元素1,元素2,...} int[] intArr; intArr new int[] {5,6,7,8}; ②动态初始化&#xff1a;只指定长度&#xff0c;不指定元素 new 类型[数组长度] int[] princes new in…

【德哥说库系列】-PostgreSQL跨版本升级

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

【算法训练-动态规划 五】【二维DP问题】最大正方形

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【动态规划】&#xff0c;使用【数组】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为&…

Kafka - 深入了解Kafka基础架构:Kafka的基本概念

文章目录 Kafka的基本概念 Kafka的基本概念 我们首先了解一些Kafka的基本概念。 1&#xff09;Producer &#xff1a;消息生产者&#xff0c;就是向kafka broker发消息的客户端2&#xff09;Consumer &#xff1a;消息消费者&#xff0c;向kafka broker获取消息的客户端3&…

如何避免Web3诈骗,重点关注这5个安全标识提醒

从预付费电子邮件到网络钓鱼攻击&#xff0c;互联网充斥着各种骗局。尽管区块链内置了加密功能&#xff0c;但它们也遭受了相当多的恶意攻击并被获取了对帐户的访问权限。幸运的是&#xff0c;大多数诈骗攻击都有特定的安全标识提醒&#xff0c;精明的用户可以留意&#xff0c;…

淘宝商品详情API接口,解决滑块问题

淘宝商品详情API接口是一种用于获取淘宝商品详细信息的接口&#xff0c;它可以帮助开发者在自己的网站或应用程序中快速获取淘宝商品的详细信息&#xff0c;包括价格、图片、商品描述等。 该接口的主要作用包括&#xff1a; 商品信息展示&#xff1a;通过淘宝商品详情API接口…

网络协议--IGMP:Internet组管理协议

13.1 引言 12.4节概述了IP多播给出&#xff0c;并介绍了D类IP地址到以太网地址的映射方式。也简要说明了在单个物理网络中的多播过程&#xff0c;但当涉及多个网络并且多播数据必须通过路由器转发时&#xff0c;情况会复杂得多。 本章将介绍用于支持主机和路由器进行多播的In…

wkhtmltoimage/wkhtmltopdf 使用实践

1. 介绍 wkhtmltopdf/wkhtmltoimage 用于将简单的html页面转换为pdf或图片&#xff1b; 2.安装 downloads 2.1. mac os 下载64-bit 版本然后按照指示安装, 遇到 untrust developers 时&#xff0c;需要在 Settings -> Privacy 处信任下该安装包。 2.2. debian # 可用…

[AutoSar NVM] 存储架构

依AutoSAR及公开知识辛苦整理&#xff0c;禁止转载。 专栏 《深入浅出AutoSAR》&#xff0c; 全文 2900 字. 图片来源&#xff1a; 知乎 汽车的ECU内存中有很多不同类型的变量&#xff0c;这些变量包括了车辆各个系统和功能所需的数据。大部分变量在ECU掉电后就会丢失&#x…

AnkiPDF Guru软件评测:打开全新学习方式的大门

在当今信息爆炸的时代&#xff0c;如何高效学习和记忆成为了每个人关注的焦点。AnkiPDF Guru软件作为结合了Anki和PDF的学习利器&#xff0c;向我们展示了一种全新的学习方式。本文将以软件的实用性和使用场景为切入点&#xff0c;从专业的角度客观分析和评测该软件&#xff0c…

3.2.6:工作表的VBA操作引申

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的劳动效率&#xff0c;而且可以提高数据处理的准确度。我推出的VBA系列教程共九套和一部VBA汉英手册&#xff0c;现在已经全部完成&#xff0c;希望大家利用、学习。 如果…

【毕业设计】基于SSM酒店后台管理系统

前言 &#x1f525;本系统可以选作为毕业设计&#xff0c;运用了现在主流的SSM框架&#xff0c;采用Maven来帮助我们管理依赖&#xff0c;所选结构非常合适大学生所学的技术&#xff0c;本系统结构简单&#xff0c;容易理解&#xff01;本系统功能结构完整&#xff0c;非常高适…

express session JWT JSON Web Token

了解 Session 认证的局限性 Session 认证机制需要配合 cookie 才能实现。由于 Cookie 默认不支持跨域访问&#xff0c;所以&#xff0c;当涉及到前端跨域请求后端接口的时候&#xff0c;需要做很多额外的配置&#xff0c;才能实现跨域 Session 认证。 注意&#xff1a; 当前端…

rust学习—— 复合类型结构体、复合类型枚举、复合类型元组

文章目录 复合类型元组用模式匹配解构元组用点来访问元组元组的使用示例 复合类型结构体结构体定义结构体语法创建结构体实例访问结构体字段简化结构体创建结构体更新语法 结构体的内存排列元组结构体(Tuple Struct)单元结构体(Unit-like Struct)结构体数据的所有权打印结构体 …

k8s kubeadm配置

master 192.168.41.30 docker、kubeadm、kubelet、kubectl、flannel node01 192.168.41.31 docker、kubeadm、kubelet、kubectl、flannel node02 192.168.41.32 do…

springboot配置redis

1.Jedis库 依赖库 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>5.0.2</version> </dependency>使用案例&#xff1a; Testpublic void jedis(){Jedis jedis new Jedis("127…

【Java 进阶篇】Java Servlet URL Patterns 详解

Java Servlet 是构建动态 Web 应用程序的关键组件之一&#xff0c;而 URL Patterns&#xff08;URL 模式&#xff09;则是定义 Servlet 如何响应不同 URL 请求的重要部分。在本文中&#xff0c;我们将深入探讨 Java Servlet URL Patterns 的各个方面&#xff0c;适用于初学者&a…

谢谢大家!

注&#xff1a;此篇都是真心话&#xff01; 谢谢各位对我长久以来的支持&#xff0c;感谢感谢&#xff01; 感谢各位把我的阅读量提升到21487&#xff01; 感谢各位把我的排名提升到24916&#xff08;灰长前&#xff0c;干到前1000我发超长文章&#xff09;&#xff01; 感谢…

会声会影2023永久稳定绿色汉化中文版安装包下载

会声会影2023操作简单&#xff0c;功能同样强大&#xff01;会声会影附带上百种特效、滤镜、转场、模板。同时各类专业级视频工具&#xff0c;如调色、遮罩、绿幕抠像、运动追踪、分屏创建器&#xff0c;满足更高标准的视频需求。这款软件上手操作简单易学&#xff0c;就算你在…

已更新!宝藏教程!MYSQL-第六章节多表查询(一对一,多对多,一对多),连接查询(内,外连接),联合查询,子查询 代码例题详解这一篇就够了(附数据准备代码)

c知识点合集已经完成欢迎前往主页查看&#xff0c;点点赞点点关注不迷路哦 点我进入c第一章知识点合集 MYSQL第一章节DDL数据定义语言的操作----点我进入 MYSQL第二章节DDL-数据库操作语言 DQL-数据查询语言----点我进入 MYSQL第三章节DCL-管理用户&#xff0c;控制权限----点我…