1.一直以来想写下基于kettle的系列文章,作为较火的数据ETL工具,也是日常项目开发中常用的一款工具,最近刚好挤时间梳理、总结下这块儿的知识体系。
2.熟悉、梳理、总结下FTP服务器相关知识体系
3.欢迎批评指正,跪谢一键三连!
- kettle访问FTP服务器文件并处理数据至PostgreSQL文章目录索引如下所示:
- 【实操视频,辅助实操学习,欢迎点赞、关注,跪谢一键三连!】【kettle012】kettle访问FTP服务器文件并处理数据至PostgreSQL文章目录索引如下所示
- KETTLE9.0资源下载
1.环境搭建、配置
- 1.0 实验环境信息
Windows 10
CentOS 7.1(虚拟机)
Docker version 26.0.2
Dbeaver
PostgreSQL 16.2, compiled by Visual C++ build 1937, 64-bit
-
Kettle 8.2
–访问异常 -
Kettle 9.0
–有效方案
- 1.1 FTP服务器环境搭建参考博文: 【FTP】配置FTP服务器并访问测试(已更新)
- 重要提示: 需 关闭防火墙 负责
ftp://192.168.48.220/
访问失败
- 1.2 CSV文件数据手动上传至FTP服务器,效果测试
- 1.3 下载资源包,搭建
kettle
实战环境
- kettle8.2资源包: pdi-ce-8.2.0.0-342.zip
- kettle9.0资源包:kettle-pdi-ce-9.0.0.0-423.zip
- 重要提示: kettle8.2版本在连接
PostgreSQL 16.2
一直提示Error connecting to database: (using class org.postgresql.Driver) 尝试连线已失败。
,使用kettle9.0版本该问题不再复现。
- dbeaver-driver-all-master资源包: dbeaver-driver-all-master
- 下载解压即可使用,运行
Spoon.bat
效果
2.基于kettle下载FTP文件服务器数据
- 注意: 采用 基于
Kettle 9.0
有效可用方案 - 2.1 FTP 下载 配置信息及运行结果详情
3.基于kettle处理数据至PostgreSQL
- 3.1 【kettle作业流程配置】版本驱动或kettle bug问题(解决了好久,尝试了很多次,替换了很多个驱动版本,均解决无效)
- kettle版本:
Kettle 8.2
,查看到类似材料说驱动版本问题,更换了很多次,尝试多个驱动版本如下,但都不能成功链接
postgresql-42.2.25.jar
postgresql-9.1-901-1.jdbc4.jar
postgresql-42.3.9.jar
postgresql-42.7.2.jar
edb-jdbc16.jar
Kettle 8.2
链接异常详情示例如下(通过Java代码测试链接成功):
- IDE + java 代码测试效果
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.sql.Statement;
public class PG {
public static void main(String[] args) {
System.out.println("PostgreSQL JDBC...");
try {
Class.forName("org.postgresql.Driver");
} catch (ClassNotFoundException e) {
System.out.println("could not find postgreSQL JDBC Driver");
e.printStackTrace();
return;
}
Connection connection = null;
try {
connection = DriverManager.getConnection(
"jdbc:postgresql://localhost:5432/postgres",
"postgres",
"postgres");
} catch (SQLException e) {
System.out.println("Connection Failed");
e.printStackTrace();
return;
}
if (connection != null) {
System.out.println("connect db successful!");
} else {
System.out.println("Failed to make conn!");
}
try {
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery("select * from youli_kettle_sy001.news_api_user");
if (rs != null) {
while (rs.next()) {
// 根据你的表结构,假设有两个字段:id和name
int userid = rs.getInt("userid");
String username = rs.getString("username");
int gender = rs.getInt("gender");
String ip = rs.getString("ip");
String headportrait = rs.getString("headportrait");
System.out.println("userid: " + userid + ", username: " + username + ", gender: " + gender + ", ip: " + ip + ", headportrait: " + headportrait);
}
} else {
System.out.println("null");
}
rs.close();
stmt.close();
connection.close();
} catch (Exception exp) {
exp.printStackTrace();
}
}
}
- 换用
Kettle 9.0
,方式【1】配置详情(提示:两种方式均可链接成功
)参考如下图: - 方式【2】配置及连接测试
# 自定义连接 URL 配置信息
jdbc:postgresql://localhost:5432/postgres?sslmode=disable
# 自定义驱动类名称 配置信息
org.postgresql.Driver
# 用户名 / 密码,替换为自己的
postgres / postgres
- 3.2 【kettle转换】流程配置
- 【CSV文件输入】配置信息
- postgresql建表语句
-- 创建数据库
create schema youli_kettle_sy001 authorization postgres;
-- 创建数据表
create table youli_kettle_sy001.news_api_user (
userid varchar(30) not null,
username varchar(50) null,
gender int4 null,
ip varchar(30) null,
"password" varchar(30) null,
region varchar(50) null,
headportrait varchar(512) null,
constraint news_api_user_pkey primary key (userid)
);
-- 查询测试
select * from news_api_user
- kettle【表输出】配置信息
4.PostgreSQL结果表效果测试
5.参考链接
- 【FTP】配置FTP服务器并访问测试(已更新)
- Kettle中文网
- kettle几个常用的小场景案例
- Powerrich Bridge错误的连接数据库