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

简介:在尝试使用了结果集的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. 遇到自己一个小时搞不定的问题,可以尝试换个思路,或者是向别人寻求帮助,很多时候,你问问题之前,肯定要自己先顺一遍,才能给别人讲清除,那么就是自己给自己讲问题,顺思路的时候,往往就能发现问题

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MOTHERNEST双十一我们的目标是:不愁货——有!不愁钱——折!

喜迎双十一&#xff0c;MOTHERNEST进入开抢模式&#xff0c;水飞蓟护肝片&#xff0c;牛初乳粉&#xff0c;液体钙维生素D3胶囊将进行抢购模式&#xff0c;每人限购4件。 开抢时间&#xff1a; 2023.10.31 20:00-2023.10.31 23:59 2023.11.03 20:00-2023.11.03 23:59 限量每…

目标检测的方法

目标检测大致分为两个方向&#xff1a;基于传统的目标检测算法和基于深度学习的目标检测算法。 1.基于传统的目标检测算法 在利用深度学习做物体检测之前&#xff0c;传统算法对于目标检测通常分为3个阶段&#xff1a;区域选取、特征提取和体征分类。 2.基于深度学习的目标检测…

win10安装spark

一、进入spark下载页面 连接 Downloads | Apache Spark 二、解压下载后的.tgz文件 直接解压即可 三、运行 运行bin目录下的 spark-shell.cmd 提示 Did not find winutils.exe: java.io.FileNotFoundException: java.io.FileNotFoundException: HADOOP_HOME and hadoop.hom…

NSSCTF做题第9页(3)

[GKCTF 2020]CheckIN 代码审计 这段代码定义了一个名为ClassName的类&#xff0c;并在脚本的最后创建了一个ClassName类的实例。 在ClassName类的构造函数中&#xff0c;首先通过调用$this->x()方法获取了请求参数$_REQUEST中的值&#xff0c;并将其赋值给$this->code属性…

短视频矩阵系统软件源码

短视频矩阵系统软件源码 视频成为获得免费流量最便宜的渠道&#xff0c;平台给所有视频最基础的保底流量。如果按照一个视频最低500流量计算&#xff0c;5个账户就是2500的流量&#xff0c;200个视频就是50W流量&#xff0c;如果从其他渠道获得50W流量是个很困难的事情。短视频…

kubeadm初始化的k8s集群证书续期—— 筑梦之路

脚本自动化方式 这个是一个开源的项目&#xff1a;https://gitee.com/ximy/update-kube-cert 该项目可以自动化更新k8s集群的证书&#xff0c;使用也很简单。 该脚本可将 kubeadm 生成的证书有效期更新为 10 年。 git clone https://github.com/yuyicai/update-kube-cert.g…

Notepad++正则查询替换操作

Notepad编辑器查找功能非常强大&#xff0c;本处记录一些实战中常用到复杂查询替换操作。 注意&#xff1a;如果是重要文件&#xff0c;替换操作前最好备份&#xff1b;当前一个操作后也可以用ctrlz恢复。 查找重复行 用查找(ctrlf)功能&#xff0c;用正则表达式模式匹配。 查…

PyCharm改变代码背景图片的使用教程

一个好的集成环境是学习和使用一门编程语言的重中之重&#xff0c;这次我给大家分享如何改变PyCharm软件的代码背景图片。 说明&#xff1a;本教程使用的是汉化版PyCharm软件。 打开PyCharm软件。 点击软件最上方导航栏的文件&#xff0c;然后找到设置。 打开设置然后点击外观…

【离散数学必刷题】命题逻辑(第一章 左孝凌)刷完包过!

复习16题&#xff1a; 【1】下列哪个语句是真命题&#xff08;&#xff09; A、今天天气真好&#xff01; B、我正在说谎。 C、如果7 2 10 &#xff0c;那么4 6 5。 D、如果7 2 9 &#xff0c; 则 4 6 5。 对于A&#xff0c;只有具有确定真值的陈述句才是命题&#xf…

酷开科技 | 酷开系统沉浸式大屏游戏更解压!

随着家庭娱乐需求日益旺盛&#xff0c;越来越多的家庭消费者和游戏玩家开始追求大屏游戏带来的沉浸感。玩家在玩游戏的时候用大屏能获得更广阔的视野和更出色的视觉包围感&#xff0c;因此用大屏玩游戏已经成为了一种潮流。用酷开系统玩大屏游戏&#xff0c;过瘾又刺激&#xf…

C语言每日一题(19)回文素数

牛客网 BC157 回文素数 题目描述 描述 现在给出一个素数&#xff0c;这个素数满足两点&#xff1a; 1、 只由1-9组成&#xff0c;并且每个数只出现一次&#xff0c;如13,23,1289。 2、 位数从高到低为递减或递增&#xff0c;如2459&#xff0c;87631。 请你判断一下&am…

HCIP-MGRE实验

实验拓扑图 需求 1 R5为ISP &#xff0c;只能进行IP地址配置;其所有地址均配为公有IP地址 2 R1和R5间使用PPP的PAP认证&#xff0c;R5为主认证方; R2于R5之间使用ppp的chap认证&#xff0c;R5为主认证方; R3于R5之间使用HDLC封装。 3 R1/R2/R3构建一个MGRE环境&#xff0c;R1为…

idea 基础设置

1、设置 IDEA 主题 2、自动导包和优化多余的包 3、同一个包下的类&#xff0c;超过指定个数的时候&#xff0c;导包合并为* 4、显示行号 &#xff0c; 方法和方法间的分隔符&#xff1a; 5、忽略大小写&#xff0c;进行提示 6、多个类不隐藏&#xff0c;多行显示 7、设置默认的…

城市正视图(Urban Elevations, ACM/ICPC World Finals 1992, UVa221)rust解法

如图5-4所示&#xff0c;有n&#xff08;n≤100&#xff09;个建筑物。左侧是俯视图&#xff08;左上角为建筑物编号&#xff0c;右下角为高度&#xff09;&#xff0c;右侧是从南向北看的正视图。 输入每个建筑物左下角坐标&#xff08;即x、y坐标的最小值&#xff09;、宽度…

(完全解决)如何输入一个图的邻接矩阵(每两个点的亲密度矩阵affinity),然后使用sklearn进行谱聚类

文章目录 背景输入点直接输入邻接矩阵 背景 网上倒是有一些关于使用sklearn进行谱聚类的教程&#xff0c;但是这些教程的输入都是一些点的集合&#xff0c;然后根据谱聚类的原理&#xff0c;其会每两个点计算一次亲密度&#xff08;可以认为两个点距离越大&#xff0c;亲密度越…

js双向绑定

题目来源&#xff1a; 双向绑定_牛客题霸_牛客网 (nowcoder.com) JS37 双向绑定 描述 请补全JavaScript代码&#xff0c;要求如下&#xff1a; 1. 监听对象属性的变化 2. 当"person"对象属性发生变化时&#xff0c;页面中与该属性相关的数据同步更新 3. 将输入框中…

ETL实现实时文件监听

一、实时文件监听的作用及应用场景 实时文件监听是一种监测指定目录下的文件变化的技术&#xff0c;当产生新文件或者文件被修改时&#xff0c;可实时提醒用户并进行相应处理。这种技术广泛应用于数据备份、日志管理、文件同步和版本控制等场景&#xff0c;它可以帮助用户及时…

Vue3踩坑指南

vue.config.ts不起作用 关于项目 项目使用的还是vue-cli搭建的&#xff0c;底层还是webpack&#xff0c;没有使用新的vite搭建。 踩坑1&#xff1a;vue.config.ts不起作用 我本着既然是vue3 ts的项目&#xff0c;那么为了规范&#xff0c;项目中所有的js文件都得替换成ts文…

牛客网刷题-(4)

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…

kr第三阶段(二)32 位汇编

编译与链接 环境配置 masm32 masm32 是微软的 masm32 的民间工具集合。该工具集合除了 asm32 本身的汇编器 ml 外还提供了&#xff1a; SDK 对应的函数声明头文件和 lib 库。32 位版本的 link&#xff08;原版本是 16 位&#xff0c;这里的 32 位版本的 link 来自 VC 6.0&a…