实用工具之Kettle数据处理
1.前言
在数据转移之前或者之后执行一些命令,比如将某一个字段数字全部加一。
1.ETL数据清洗工具总结
2.pentaho/pentaho-kettle
3.从SQL Server到MySQL,近百亿数据量迁移实战
4.大数据 ETL 处理工具 Kettle 入门实践
5.kettle入门实战
6.ETL工具datax任务构建可视化管理datax-web操作指南
7.ETL还是ELT?这个工具玩转数据清洗实现高效率 这里介绍了一个ETL工具-亿辰ABI
2.安装
(1) 到官网去下载,下载后进行解压到 data-integration 目录
(2) 下载 JAVA 8 242 版本,解压 zip 到 data-integration\java 目录下
(3) 设置环境变量 PENTAHO_JAVA_HOME(windows和linux设置方法不一样,不写了),指向这个 java 目录
(4) 直接找到运行 Spoon.bat ,双击运行。
1.Kettle — 安装和部署
3.使用
【需求】
从sql server中读取数据,将其中一列的SiteNo的值在自身的基础上加伤200,替换原先的值,保存到另外的同结构的数据库中,或者是本身的数据库中。
1.连接数据库
(1) 下载驱动文件,解压jtds,并将 jtds-1.3.1.jar 文件,放到 pdi 安装文件的lib文件夹下,我这里安装到了 :/soft/pdi-ce-9.2.0.0-290/data-integration/lib 目录下。
(2) 新建转换->工具栏上的+,添加数据库链接,选择MS SQL Server
添加两个数据库,一个是输入数据库,一个是输出数据库
1.ETL-Kettle学习笔记(入门,简介,简单操作)
2.從 SQL Server 使用 Kettle 同步資料到 ElasticSearch 这里有SQL Server的连接和测试方法,以及安装插件
3.[kettle入门实战(https://zhuanlan.zhihu.com/p/137383200)
2.编写流程
我这里已一个简单的数据转换开始,从表输入,到插入更新到另外的一张表中,主要就是通过插件的形式进行拖动,然后 Ctrl+Shift+鼠标左键 选中一个组件然后拖动,产生一个连线,一个步骤就算创建完成了。
找到 输入->表输入,选择需要输入的表数据
找到 输出->插入/更新,选择需要插入和更新的字段
这里的用来查询的关键字就是Where要填,否则就有可能出现Where语法错误执行转换
保存转换步骤,然后执行,可以在步骤度量中查看执行步骤
1.Kettle 值映射
3.编写java类
理论上,kettle的组件可以完成大部分的功能,但是我刚开始使用,没有找到将一个列的值自身加200的组件方法,于是就直接使用了Java代码的方法。在输入和输出之间,添加一个java脚本处理。
1 | public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException |
1.kettle-如何在kettle中编写java代码 这里主要的参考文章,但是很多的部分我用不到
2.Parameter INTEGER in Table Input
3.kettle调用java代码处理数据
4.kettle 教程(四):自定义 Java 代码 这里指出了双击右侧,直接就生成了一个自动化的代码,然后在这个代码的基础上,进行了修改,不过代码都要自己手敲,作者直接贴了图片
问题
(1) Could not create the Java Virtual Machine
我在电脑上安装了JAVA8,我运行的 Spoon.bat,出现了这个问题。
[尝试]
(1) 升级java版本
后来我升级了JDK版本,弄成了13.0.1,但是在问题论坛上,有人说:它可能与 JDK-13 一起工作,但它从未被证明可以工作,查看官方文档,你会看到它只为 JDK-8 获得认证,因此,您需要安装 JDK 8 并将 PENTAHO_JAVA_HOME 指向该版本。
[解决]
重新安装回jdk1.8,然后配置了环境变量:PENTAHO_JAVA_HOME= C:\Program Files (x86)\Java\jdk1.8.0_291,双击 Spoon.bat 不再弹出错误了,但是问题是,界面一闪而过,没有图形界面产生。
继续往下解决问题。
1.java虚拟机内存不足,“Could not create the Java Virtual Machine”问题解决方案
2.question
3. Jdk-13.0.1 and Jdk-13.0.2 not working for PDI 9
(2) no libwebkitgtk-1.0 detected, some features will be unavailable
在linux上执行: bash spoon.sh 之后,出现了这个问题,在安装文件README.md中有说明:The libwebkitgtk package needs to be installed. This can be done by running “apt-get install libwebkitgtk-1.0.0”
[解决]
从 libwebkitgtk-1.0-0_2.4.11-3ubuntu3_amd64.deb 下载libwebkitgtk-1.0-0相应版本,还要下载安装依赖包,比如:libicu60、libjavascriptcoregtk-1.0-0_2.4.11-3ubuntu3_amd64,也是在上面的地址下载,可以在依赖中找到其中的deb,下载安装就可以了。
1.linux Kettle安装解决 缺少libwebkitgtk-1.0-0库问题
2.How do I install libwebkitgtk-1.0-0 on Ubuntu 19.04
3.libwebkitgtk-1.0-0 no longer available #177
4.libwebkitgtk-1.0-0_2.4.11-3ubuntu3_arm64.deb libwebkitgtk-1.0-0 下载地址
(3) windows上一闪而过,无法启动
[尝试]
1.安装了infobright_jni_64bit
infobright-core 这里下载windows版本的 infobright_jni_64bit,放到 c:/Windows/System32/ 目录下,重命名为infobright_jni.dll,然后重启了电脑
2.修改启动文件
我根据参考文章,修改了启动Spoon.bat文件,中的 “-Xms512m” “-Xmx512m”
3.运行 SpoonDebug.bat
我运行了SpoonDebug.bat,在目录下生成了 SpoonDebug.txt文件,里面有错误:Exception in thread “main” java.lang.NoClassDefFoundError: org/eclipse/swt/widgets/Control
1 | Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/swt/widgets/Control |
由于JAVA版本过高,不能高于 JAVA 8 242 版本。
[解决]
(1) 从下载 JAVA 8 242 版本,解压 zip
(2) 将解压后的文件放到 $PENTAHO_JAVA_HOME /java下
(3) 设置环境变量 PENTAHO_JAVA_HOME,指向该目录
1.运行spoon.bat时Kettle无法启动问题解决 jdk环境变量没配置好,是否电脑硬件配置太低了,是由于本机内存被占用过多,而JVM参数设置过大,导致JVM无法启动
2.java - 使用SWT时出现NoClassDefFoundError/ClassNotFoundException
3.Mac Kettle 安装 由于 jdk 版本不兼容导致,不能高于 JAVA 8 242 版本
(3) Failed to execute runnable (java.lang.NoClassDefFoundError: Could not initialize class org.pentaho.big.data.impl.cluster.NamedClusterImpl)
在创建了一个基本的输入输出之后,执行转换,结果出现了这个错误。
5.读取geojson插入mysql表中
需求:将属性信息转化到mysql数据表中,并且将id号和coordinates坐标进行保存。
解决:基本的操作方法就和参考文章1中的相似,不会的可以进行参考,大体步骤如下:
(1) 使用在线json建表工具,创建mysql中的表
(2) 使用nodejs处理geojson中的属性信息和coordinates坐标信息,转换为标准的json文件
(3) 新建转换,添加 JSON文件处理,选择需要处理的文件,选择字段,编辑映射
(4) 新建 ”插入和更新“,选择新建数据库链接
(5) 使用shift将json文件处理和插入更新处理连接
(6) 在插入更新中,选择目标表,选择->获取字段,选择->获取更新字段。
(7) 配置无误之后,保存转换步骤,执行就可以了。
1.Kettle(读取json数据插入或更新到MySQL数据库的t_user_1表中)
2.在线JSON转MySQL建表语句工具 先使用json在线建表工具进行建表,然后进行数据更新
3.Kettle使用Java代码处理Json文件,并写入数据库
4.kettle读取json文件并读取数据_kettle读取嵌套JSON内容的方法_Cookie Young的博客-程序员宅基地 需要解析多层级的嵌套json到关系型数据库中,这里大概讲解一下kettle的处理流程,具体原理其实和递归差不多,就是一层层嵌套的数据,像剥洋葱一样,一层一层的把他剥开,逐层解析。