美文网首页
Kettle (2) - 抽取数据库表的数据

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

作者: Stone0823 | 来源:发表于2017-11-21 09:55 被阅读151次

    数据库表是 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

    相关文章

      网友评论

          本文标题:Kettle (2) - 抽取数据库表的数据

          本文链接:https://www.haomeiwen.com/subject/uwyfvxtx.html