Kettle (2) - 抽取数据库表的数据

数据库表是 ETL 数据抽取最常见的的数据源。我们以 MySQL 为例,了解 Kettle 从数据库中抽取数据的要点。

连接数据库,最重要的是数据库驱动。对传统数据库,Kettle 同时支持 JDBC 和 ODBC,但如果 Java 版本 为 Java 8 以上,使用 OBDC 会有问题,因为 Java 8 中 JDBC-ODBC Bridge 已经被移除,所以可能的话,尽量避免 ODBC。

连接数据库

Kettle PDI 7.1 并没有提供 jdbc-MySQL 的数据库驱动,需要自行下载,然后将驱动 (比如我下载的版本 mysql-connector-java-5.1.44-bin.jar)放在 pdi 安装目录\data-integration\lib 目录下。

启动 Spoon,新建一个转换,切换到导航区的 “主对象树”,选中 “DB连接”,鼠标右键,选择“新建数据库连接向导”。

  • 数据库连接名称:localmysql
  • 数据库连接类型:MySQL
  • 数据库访问类型: Native (JDBC)

点击 “Next” 按钮,连接到本地数据库,服务器主机名:localhost,“数据库” 输入 sakila,这是 MySQL 提供的示例数据库,可以在官网下载并且导入。

image.png

点击 “Next” 按钮,输入用户名和密码,测试连接,如果连接成功,点击 “确定” 按钮,完成到数据库的连接。

从数据库表抽取数据

从数据库表抽取数据,需要用到 “表输入” 控件。从 “输入” 文件夹下,选择 “表输入” 组件,拖放到右边的工作区。双击:

我们看到,数据库连接字段,默认已经有了上一步创建的连接 “localmysql”。中间部分的 SQL 编辑框,可以手写 SQL 语句,或者使用“获取SQL查询语句”,用可视化的方式来编写 SQL语句。

假设我们要抽取 film 表中的数据,SQL 语句为:

SELECT * FROM film;

点击 “预览” 按钮,出现了如下错误,截取关键行如下:

2017/11/21 09:28:26 - 表输入.0 - Unable to get value 'Date' from database resultset, index 3
2017/11/21 09:28:26 - 表输入.0 - Cannot convert value '2006' from column 4 to TIMESTAMP.

原来, MySQL 有 year 这种数据类型,Java 尝试将这种类型转换成 TIMESTAMP 出现错误。可视化的工具,在自由度上还是有所欠缺。采用强转的方式,将该字段转换成 String:

SELECT
  film_id
, title
, description
, convert(release_year using utf8) as ryear
, language_id
, original_language_id
, rental_duration
, rental_rate
, length
, replacement_cost
, rating
, special_features
, last_update
FROM film

预览成功。将抽取的数据输出至 Excel,从 “输出” 文件夹,将 “Excel输出” 组件拖至工作区,连接 “表输入” 步骤和 “Excel输出”。“Excel输出” 步骤的设置如下:

切换到 “字段” 页签:

参数化查询

如果要对数据进行筛选,可以在 SQL 语句的 where 直接写筛选的条件,也可以使用 JDBC 风格的 参数化查询 (使用问号)。参数来自上一步,可以用常量或者变量

自定义常量步骤:

切换到 “数据” 页签,限定 title 为 A 开头:

表输入步骤:

image.png

参考文档

Why you should avoid ODBC?
MySQL Convert Function

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
kettle是一款强大的ETL工具,可以用于数据抽取、转换和加载。如果要使用kettle抽取数据库内所有数据,可以按照以下步骤进行操作: 1. 首先,通过kettle数据库连接功能连接到目标数据库。你需要提供数据库的连接信息,包括数据库类型、主机名、端口号、数据库名称、用户名和密码等。 2. 在kettle的工作区中创建一个新的Transformation(转换)任务。在Transformation中,你可以添加多个步骤来完成数据抽取的过程。 3. 在Transformation中添加一个"Table Input"(输入)步骤。在该步骤的设置中,选择目标数据库,并选择要抽取数据。 4. 添加一个输出步骤,例如"Text File Output"(文本文件输出)。在该步骤的设置中,选择输出的文件路径和格式,以及要包含的字段。 5. 可以根据需要添加其他步骤,例如数据转换、数据过滤等,以满足数据处理的要求。 6. 运行Transformation,kettle将按照设定的步骤顺序依次执行,并将数据库内所有数据抽取到指定的输出文件中。 7. 完成数据抽取后,你可以根据需要对输出的文件进行进一步处理,例如导入到其他系统或数据库中。 总结起来,使用kettle抽取数据库内所有数据的过程包括连接数据库、创建Transformation任务、设置数据抽取步骤、运行任务并输出结果。这样就可以方便地将数据库内的数据提取到指定的输出文件中,为后续的数据处理和分析提供方便。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值