Kettle数据库配置抽离

Kettle数据库配置抽离在使用ETL工具Kettle时候,为了使作业或转换具有通用性,有时候,我们需要将数据库的连接配置从脚本或转换中抽离出来,下面介绍一种方案,该方案主要涉及的文件有: # 这两个文件,默认是在系统的用户…

Kettle数据库配置抽离

# 这两个文件,默认是在系统的用户目录下,如果配置了KETTLE_HOME环境变量,则spoon会去KETTLE_HOME的目录下加载这两个文件
<USER_HOME>/.kettle/kettle.properties
<USER_HOME>/.kettle/shared.xml

代码100分

共享数据库配置

在作业中,按照DB连接向导建立一个数据库连接,填入完整的数据库连接信息。

image-20181017182547003

image-20181017182954582

建立完连接,测试连接成功后,在该DB连接上点右键,选择“共享”。

image-20181017183142392

完成上述共享操作后,就可以在以下文件中找到共享数据库链接的配置:

代码100分<USER_HOME>/.kettle/shared.xml
<?xml version="1.0" encoding="UTF-8"?>
<sharedobjects>
  <connection>
    <name>test_db</name>
    <server>127.0.0.1</server>
    <type>MYSQL</type>
    <access>Native</access>
    <database>test_db</database>
    <port>3306</port>
    <username>testdb</username>
    <password>Encrypted 2be98afc86aa7f2e4cb79ff228dc6fa8c</password>
    <servername/>
    <data_tablespace/>
    <index_tablespace/>
    <attributes>
      <attribute><code>PORT_NUMBER</code><attribute>3306</attribute></attribute>
    </attributes>
  </connection>

</sharedobjects>

这样设置后,你就可以在后续的作业和转换中选择这个共享的test_db。

虽然这样算是抽离出了DB连接,但是还不够优化,下面介绍如何将DB连接中的部分配置再次抽离出来。

抽离DB配置

例如,我们想将数据库的地址、SID、username、password从shared.xml中抽离出来,这个时候,就需要用到

代码100分<USER_HOME>/.kettle/kettle.properties

我们只需要在这个文件中定义相关的DB变量,如下:

test_db_host=127.0.0.1
test_db_port=3306
test_db_sid=test_db
test_db_user=test_db
test_db_password=Encrypted 2be98afc86aa7f2e4cb79ff228dc6fa8c

然后,我们修改

<USER_HOME>/.kettle/shared.xml
<?xml version="1.0" encoding="UTF-8"?>
<sharedobjects>
  <connection>
    <name>test_db</name>
    <server>${test_db_host}</server>
    <type>MYSQL</type>
    <access>Native</access>
    <database>${test_db_sid}</database>
    <port>${test_db_port}</port>
    <username>${test_db_user}</username>
    <password>${test_db_password}</password>
    <servername/>
    <data_tablespace/>
    <index_tablespace/>
    <attributes>
      <attribute><code>PORT_NUMBER</code><attribute>${test_db_port}</attribute></attribute>
    </attributes>
  </connection>

</sharedobjects>

这样,就彻底的将数据库的配置从作业和转换中抽离出来了。

注意的一点是,最好在shared.xml中增加如下的数据库连接属性,可以有效避免数据传输字符、日期转换问题

<connection>
    <name>test_db</name>
    <server>${test_db_host}</server>
    <type>MYSQL</type>
    <access>Native</access>
    <database>${test_db_sid}</database>
    <port>${test_db_port}</port>
    <username>${test_db_user}</username>
    <password>${test_db_password}</password>
    <servername/>
    <data_tablespace/>
    <index_tablespace/>
    <attributes>
      <attribute>
        <code>EXTRA_OPTION_MYSQL.characterEncoding</code>
        <attribute>utf8</attribute>
      </attribute>
      <attribute>
        <code>FORCE_IDENTIFIERS_TO_LOWERCASE</code>
        <attribute>N</attribute>
      </attribute>
      <attribute>
        <code>FORCE_IDENTIFIERS_TO_UPPERCASE</code>
        <attribute>N</attribute>
      </attribute>
      <attribute>
        <code>IS_CLUSTERED</code>
        <attribute>N</attribute>
      </attribute>
      <attribute>
        <code>PORT_NUMBER</code>
        <attribute>${test_db_port}</attribute>
      </attribute>
      <attribute>
        <code>PRESERVE_RESERVED_WORD_CASE</code>
        <attribute>Y</attribute>
      </attribute>
      <attribute>
        <code>QUOTE_ALL_FIELDS</code>
        <attribute>N</attribute>
      </attribute>
      <attribute>
        <code>SQL_CONNECT</code>
        <attribute>set names utf8</attribute>
      </attribute>
      <attribute>
        <code>STREAM_RESULTS</code>
        <attribute>Y</attribute>
      </attribute>
      <attribute>
        <code>SUPPORTS_BOOLEAN_DATA_TYPE</code>
        <attribute>Y</attribute>
      </attribute>
      <attribute>
        <code>SUPPORTS_TIMESTAMP_DATA_TYPE</code>
        <attribute>Y</attribute>
      </attribute>
      <attribute>
        <code>USE_POOLING</code>
        <attribute>N</attribute>
      </attribute>
    </attributes>
  </connection>

做完上述的DB连接的共享和配置后,再处理作业和转换时,如果选择共享的DB连接,实际上Kettle会复制shared.xml中的数据库配置到具体的作业和转换中,复制过去后,相应的变量会从kettle.properties中读取。

也就是说,如果要把作业和转换发布到正式环境,实际上可以不需要shared.xml,shared.xml更多的作用是用于开发阶段。

另外,注意每次修改了shared和kettle.properties,要重启Kettle的开发工具,否则可能无法正常生效。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/8664.html

(0)
上一篇 2023-02-24
下一篇 2023-02-24

相关推荐

  • python面向对象1(python面向对象的三个基本特征)

    python面向对象1(python面向对象的三个基本特征)面向过程和面对对象是一种编程思想,不能说某某语言是不是面对对象或是面向过程,而是某某语言是否支持面对对象或面向过程。回归主题,python可以支持面对对象,但也可以支持面向过程,即使不支持面向对象的语言,比如c语言,也可以用面对对象的思想写程序。你可以理解面对对象为“模块化”,恰巧python可以做到这一点,自己编写的函数文件可以用import引用模块,即使不使用class定义类,也可以实现面对对象的思想。

    2023-11-20
    74
  • 数据库系统概论-[亲测有效]

    数据库系统概论-[亲测有效]数据模型 数据模型的含义 数据模型是对现实世界中各种事物或实体特征的数字化模拟和抽象,用以表示现实世界中的实体及实体之间的联系,使之存放在计算机中,并通过计算机软件进行处理,数据模型是用来描述数据、组

    2023-01-31
    98
  • Python转换成小写字符串

    Python转换成小写字符串在Python中,字符串是一种非常常见的数据类型,我们经常需要对字符串进行各种操作,如转换大小写、截取子串、替换字符等等。在本文中,我们将主要探讨如何将一个Python字符串转换成小写字符串。

    2024-01-25
    50
  • -B+树索引和HASH索引有哪些不一样【MySQL系列】「建议收藏」

    -B+树索引和HASH索引有哪些不一样【MySQL系列】「建议收藏」我们都理解B+树和Hash索引的区别有助于我们预测索引在不同的存储引擎中是怎么执行查询的。

    2023-05-29
    99
  • mysql进阶知识_什么是MySQL

    mysql进阶知识_什么是MySQLMYSQL(进阶篇)——一篇文章带你深入掌握MYSQL 我们在上篇文章中已经学习了MYSQL的基本语法和概念 在这篇文章中我们将讲解底层结构和一些新的语法帮助你更好的运用MYSQL 温馨提醒:该文章大

    2023-05-30
    98
  • 如何在MySQL中分配innodb_buffer_pool_size[亲测有效]

    如何在MySQL中分配innodb_buffer_pool_size[亲测有效]innodb_buffer_pool_size是整个MySQL服务器最重要的变量。 1. 为什么需要innodb buffer pool? 在MySQL5.5之前,广泛使用的和默认的存储引擎是MyI…

    2023-02-12
    105
  • mongodb intellishell studio 3T shell 操作[通俗易懂]

    mongodb intellishell studio 3T shell 操作[通俗易懂]当需要在mongo中多表查询或者关联查询并导出结果当时候,可以用类似script语法。 特别注意的是,如果采用3T的导出操作export,只有最后语句是查询语句才能导出 var ids = [] d…

    2023-03-05
    121
  • mysql增加删除列_mysql数据库添加列

    mysql增加删除列_mysql数据库添加列alter table table_name drop column create_time; alter table table_name add column create_time times…

    2023-02-07
    99

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注