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

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

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

相关文章

OSPF的网络类型

1.3配置OSPF的网络类型 1.3.1实验3&#xff1a;配置P2P网络类型 实验需求 实现单区域OSPF的配置实现通过display命令查看OSPF的网络类型 实验拓扑 实验拓扑如图1-11所示 图1-11 配置P2P网络类型 实验步骤 步骤1&#xff1a;[1] 配置IP地址 路由器R1[2] 的配置 <Huawe…

html iframe 框架有哪些优缺点?

目录 前言&#xff1a; 用法&#xff1a; 理解&#xff1a; 优点&#xff1a; 嵌套外部内容&#xff1a; 独立性&#xff1a; 分离安全性&#xff1a; 跨平台兼容性&#xff1a; 方便维护&#xff1a; 缺点&#xff1a; 性能开销&#xff1a; 用户体验问题&#xf…

vue项目中内嵌iframe,打包上线时候iframe地址如何写?

vue项目中内嵌iframe&#xff0c;打包上线时候iframe地址如何写 一、项目结构1.内嵌的iframe文件位置2.打包后的iframe的位置 二、代码 前提描述&#xff0c;项目是用webpack打包的&#xff0c;内嵌一个完整的js小组件 一、项目结构 1.内嵌的iframe文件位置 2.打包后的iframe的…

图论05-【无权无向】-图的广度优先BFS遍历-路径问题/检测环/二分图/最短路径问题

文章目录 1. 代码仓库2. 单源路径2.1 思路2.2 主要代码 3. 所有点对路径3.1 思路3.2 主要代码 4. 联通分量5. 环检测5.1 思路5.2 主要代码 6. 二分图检测6.1 思路6.2 主要代码6.2.1 遍历每个联通分量6.2.2 判断相邻两点的颜色是否一致 7. 最短路径问题7.1 思路7.2 代码 1. 代码…

听GPT 讲Rust源代码--library/std(2)

File: rust/library/std/src/sys_common/wtf8.rs 在Rust源代码中&#xff0c;rust/library/std/src/sys_common/wtf8.rs这个文件的作用是实现了UTF-8编码和宽字符编码之间的转换&#xff0c;以及提供了一些处理和操作UTF-8编码的工具函数。 下面对这几个结构体进行一一介绍&…

wkhtmltoimage/wkhtmltopdf 使用实践

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

【完美世界】被骂国漫之耻,石昊人设战力全崩,现在真成恋爱世界了

【侵权联系删除】【文/郑尔巴金】 深度爆料&#xff0c;《完美世界》动漫第135集预告片已经更新了&#xff0c;但是网友们对此却是一脸槽点。从预告中可以看出&#xff0c;石昊在和战王战天歌的大战中被打成重伤&#xff0c;最后云曦也被战天歌抓住。在云曦面临生死危机的时候…

SRAM与DRAM的区别

目录 SRAM 特点 应用场景 DRAM 特点 应用场景 SRAM和DRAM的区别 SRAM SRAM&#xff08;静态随机存取存储器&#xff09;是一种用于存储和检索数据的类型的计算机内存。SRAM的存储单元通过触发器&#xff08;flip-flop&#xff09;实现&#xff0c;它们可以保持数据的状态…

linux-文件系统

目录 一、文件系统 1.分区 2.文件系统分类 3.文件系统创建工具 4.查看文件系统的属性 5.挂载 6.buffer和cache 一、文件系统 1.分区 1-4个主分区 第五个序号开始&#xff0c;是逻辑分区 2.文件系统分类 vfs文件系统 ------------- virtualenv file System&#xff0…

Tensorboard安装及简单使用

Tensorboard 1. tensorboard 简单介绍2. 安装必备环境3. Tensorboard安装4. 可视化命令 1. tensorboard 简单介绍 TensorBoard是一个可视化的模块&#xff0c;该模块功能强大&#xff0c;可用于深度学习网络模型训练查看模型结构和训练效果&#xff08;预测结果、网络模型结构…

Uniapp 酷炫钱包页面模板 直接引用

使用教程 直接引用Vue页面 即可 <template><view><TCqianbao></TCqianbao></view> </template> <script>import TCqianbao from /uni_modules/TC-qianbao/pages/index.vueexport default {components:{TCqianbao},} </script&…

UVM 验证方法学之interface学习系列文章(八)《interface不小心引入X态问题》

前面的文章学习,想必大家都对interface 有了深入了解。大家可不要骄傲哦,俗话说:小心驶得万年船。今天,再给大家介绍一个工作中,不是经常遇到,但是一旦遇到,会让你纠结很久的事情。 前面文章提到,随着验证复杂度的不断增加,interface 的bind 的操作,是必不可少的用法…

asp.net网上商城系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio协同过滤设计

一、源码特点 asp.net网上商城系统是一套完善的web设计管理系统系统采用协同过滤算法进行商品推荐&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库 为sqlserver2008&#xff0c;使用c#语言开发 ASP…

RK356X/RK3588构建Ubuntu20.04根文件系统

文章目录 前言一、官网下载ubuntu-base二、挂载并构建文件系统2.1、配置构建文件系统环境2.2、编写挂载脚本mount.sh并安装相关工具2.3、轻量级的桌面环境 lubuntu-desktop2.4、卸载一些不必要的软件2.5、添加用户2.6 、允许root用户登录桌面2.7、串口自动登录2.8、添加分区释放…

阿里云对象存储OSS文件无法预览,Bucket设置了Referer

您发起的请求头中没有Referer字段或Referer字段为空&#xff0c;与请求Bucket设置的防盗链策略不相符。 解决方案 您可以选择以下任意方案解决该问题。 在请求中增加Referer请求头。 GET /test.txt HTTP/1.1 Date: Tue, 20 Dec 2022 08:48:18 GMT Host: BucketName.oss-examp…

springboot actuator 常用接口

概述 微服务作为一项在云中部署应用和服务的新技术是当下比较热门话题&#xff0c;而微服务的特点决定了功能模块的部署是分布式的&#xff0c;运行在不同的机器上相互通过服务调用进行交互&#xff0c;业务流会经过多个微服务的处理和传递&#xff0c;在这种框架下&#xff0…

【go-zero】go-zero 脚手架 simple-admin 开篇:安装 了解 goctls

一、什么是goctls 1、github地址 官方链接: goctls链接:https://github.com/suyuan32/goctls 官方视频教程: SimpleAdmin环境配置-工具安装 2、goctls说明 二、安装 goctls 1、使用go install 推荐使用 go install 进行安装 我个人使用的是mac的zsh ,之前是git clone的源…

Chapter1:C++概述

此专栏为移动机器人知识体系的 C {\rm C} C基础&#xff0c;基于《深入浅出 C {\rm C} C》(马晓锐)的笔记&#xff0c; g i t e e {\rm gitee} gitee链接: 移动机器人知识体系. 1.C概述 1.1 C概述 计算机系统分为硬件系统和软件系统。 硬件系统&#xff1a;指组成计算机的电子…

VMware Ubuntu 关闭自动更新

##1. VMware 17Pro&#xff0c;ubuntu16.04 关闭自动更新 1.1 编辑–》 首选项–》更新–》启动时检查产品更新 2. 这里关了还不够&#xff0c;第二天打开的时候还是提醒系统更新&#xff0c;需要关闭另外的地方 3. 关闭更新检查&#xff0c;默认的是隔天检查一次&#xff0c;…

栈(Stack)的概念+MyStack的实现+栈的应用

文章目录 栈&#xff08;Stack&#xff09;一、 栈的概念1.栈的方法2.源码分析 二、MyStack的实现1.MyStack的成员变量2.push方法3.isEmpty方法和pop方法4.peek方法 三、栈的应用1.将递归转化为循环1.调用递归打印2.通过栈逆序打印链表 栈&#xff08;Stack&#xff09; 一、 栈…