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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,367评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,959评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,750评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,226评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,252评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,975评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,592评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,497评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,027评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,147评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,274评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,953评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,623评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,143评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,260评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,607评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,271评论 2 358

推荐阅读更多精彩内容