热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用Embulk从Oracle抽取数据到Trafodion

在前面的文章,我们介绍过使用开源工具Kettle可以实现关系型数据库如Oracle到Trafodion的数据抽取工作,本文介绍另外一种ETL工具Embu

在前面的文章,我们介绍过使用开源工具Kettle可以实现关系型数据库如Oracle到Trafodion的数据抽取工作,本文介绍另外一种ETL工具Embulk。Embulk是一款开源的批量加载工具,可以在多种数据库、存储引擎、文本格式及云服务之间进行数据转换,Embulk官网中的下面这张图比较简单明了的描述出了其特点,

这里写图片描述

Embulk提供很多plugins,包括Input plugins、Output plugins、File parser plugins等,详细可以参考http://www.embulk.org/plugins/。用户也可以开发自己的plugins并上传,如EsgynDB就基于trafodion自己开发一款基于trafodion的upsert using load实现的批量加载插件,如下图,

这里写图片描述

本文在此利用上述的trafodion output插件及oracle input插件通过实例描述如何使用embulk实现oracle到trafodion的数据加载。
1 下载安装Embulk

wget https://dl.embulk.org/embulk-latest.jar
mkdir ~/.embulk/bin
mv embulk-latest.jar ~/.embulk/bin/embulk
chmod +x ~/.embulk/bin/embulk
echo 'export PATH="$HOME/.embulk/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

2 验证Embulk下载安装成功

[root@n12 ~]# embulk gem list
2017-09-05 20:19:51.184 +0800: Embulk v0.8.31*** LOCAL GEMS ***did_you_mean (default: 1.0.1)
jar-dependencies (default: 0.3.5)
jruby-openssl (0.9.17 java)
json (1.8.3 java)
minitest (default: 5.4.1)
net-telnet (default: 0.1.1)
power_assert (default: 0.2.3)
psych (2.0.17 java)
racc (1.4.14 java)
rake (default: 10.4.2)
rdoc (default: 4.2.0)
test-unit (default: 3.1.1)

3 安装oracle input插件及trafodion output插件

embulk gem install embulk-input-oracle
embulk gem install embulk-output-trafodion

4 验证以上插件安装成功

root@n12 ~]# embulk gem list
2017-09-05 20:22:57.146 +0800: Embulk v0.8.31*** LOCAL GEMS ***did_you_mean (default: 1.0.1)
embulk-input-oracle (0.8.5)
embulk-output-trafodion (0.1.1)
jar-dependencies (default: 0.3.5)
jruby-openssl (0.9.17 java)
json (1.8.3 java)
minitest (default: 5.4.1)
net-telnet (default: 0.1.1)
power_assert (default: 0.2.3)
psych (2.0.17 java)
racc (1.4.14 java)
rake (default: 10.4.2)
rdoc (default: 4.2.0)
test-unit (default: 3.1.1)

5 准备oracle jar包,用于读取oracle数据库

[root@n12 ~]# ll /opt/drivers/
total 2676
-rw-rw-r-- 1 trafodion trafodion 2739670 Sep 5 20:38 ojdbc6.jar

6 编辑YAML文件oracle_to_trafodion.yml
注:Embulk使用YAML文件来定义数据批量加载的方式,YAML文件格式定义可参考 http://www.embulk.org/docs/built-in.html#embulk-configuration-file-format

exec:max_threads: 8min_output_tasks: 4
in:type: oracledriver_path: /opt/drivers/ojdbc6.jarurl: "jdbc:oracle:thin:@10.10.11.16:1521:esgyn"user: systempassword: system12345query: |select * from test_tbl
out:type: trafodionurl: "jdbc:t4jdbc://192.168.1.93:23400/:schema=seabase"user: trafodionpassword: traf123default_timezone: 'Asia/Shanghai'table: TEST_TBLmode: insert_direct

7 创建Oracle测试表并插入测试数据

SQL> create table test_tbl(a char(10),b char(10));
SQL> insert into test_tbl values('a','b');
SQL> insert into test_tbl values('c','d');
SQL> insert into test_tbl values('e','f');
SQL> select * from test_tbl;A B
---------- ----------
a b
c d
e f

8 创建Trafodion目标表

>>create table test_tbl(a char(10),b char(10));--- SQL operation complete.
>>select * from test_tbl;--- 0 row(s) selected.

9 运行Embulk任务

--预览
embulk preview ~/oracle_to_trafodion.yml
[root@n12 ~]# embulk preview ~/oracle_to_trafodion.yml
2017-09-05 20:41:24.093 +0800: Embulk v0.8.31
2017-09-05 20:41:27.303 +0800 [INFO] (0001:preview): Loaded plugin embulk-input-oracle (0.8.5)
2017-09-05 20:41:27.662 +0800 [INFO] (0001:preview): Using JDBC Driver 11.2.0.4.0
2017-09-05 20:41:27.977 +0800 [INFO] (0001:preview): SQL: select * from test_tbl2017-09-05 20:41:27.999 +0800 [INFO] (0001:preview): > 0.02 seconds
+------------+------------+
| A:string | B:string |
+------------+------------+
| a | b |
| c | d |
| e | f |
+------------+------------+--运行
embulk run ~/oracle_to_trafodion.yml
[root@n12 ~]# embulk run ~/oracle_to_trafodion.yml
2017-09-05 21:01:26.419 +0800: Embulk v0.8.31
2017-09-05 21:01:30.260 +0800 [INFO] (0001:transaction): Loaded plugin embulk-input-oracle (0.8.5)
2017-09-05 21:01:30.298 +0800 [INFO] (0001:transaction): Loaded plugin embulk-output-trafodion (0.1.1)
2017-09-05 21:01:30.807 +0800 [INFO] (0001:transaction): Using JDBC Driver 11.2.0.4.0
2017-09-05 21:01:30.995 +0800 [INFO] (0001:transaction): Using local thread executor with max_threads=8 / output tasks 4 = input tasks 1 * 4
-----------------------------------jdbc:t4jdbc://192.168.1.93:23400/:schema=seabase
2017-09-05 21:01:31.019 +0800 [INFO] (0001:transaction): Connecting to jdbc:t4jdbc://192.168.1.93:23400/:schema=seabase options {user=trafodion, tcpKeepAlive=true, useCompression=true, rewriteBatchedStatements=true, connectTimeout=300000, socketTimeout=1800000}
connection------------------------------------:org.trafodion.jdbc.t4.TrafT4Connection@1cc41b77
2017-09-05 21:01:36.271 +0800 [INFO] (0001:transaction): Using insert_direct mode
[WARN] Plugin uses deprecated constructor of org.embulk.spi.time.TimestampFormatter.
[WARN] Report plugins in your config at: https://github.com/embulk/embulk/issues/745
2017-09-05 21:01:40.345 +0800 [INFO] (0001:transaction): {done: 0 / 1, running: 0}
-----------------------------------jdbc:t4jdbc://192.168.1.93:23400/:schema=seabase
2017-09-05 21:01:40.389 +0800 [INFO] (0026:task-0000): Connecting to jdbc:t4jdbc://192.168.1.93:23400/:schema=seabase options {user=trafodion, tcpKeepAlive=true, useCompression=true, rewriteBatchedStatements=true, connectTimeout=300000, socketTimeout=1800000}
connection------------------------------------:org.trafodion.jdbc.t4.TrafT4Connection@4ee9df38
2017-09-05 21:01:40.970 +0800 [INFO] (0026:task-0000): Prepared SQL: UPSERT USING LOAD INTO "TEST_TBL" ("A", "B") VALUES (?, ?)
-----------------------------------jdbc:t4jdbc://192.168.1.93:23400/:schema=seabase
2017-09-05 21:01:47.001 +0800 [INFO] (0026:task-0000): Connecting to jdbc:t4jdbc://192.168.1.93:23400/:schema=seabase options {user=trafodion, tcpKeepAlive=true, useCompression=true, rewriteBatchedStatements=true, connectTimeout=300000, socketTimeout=1800000}
connection------------------------------------:org.trafodion.jdbc.t4.TrafT4Connection@785aae0e
2017-09-05 21:01:52.935 +0800 [INFO] (0026:task-0000): Prepared SQL: UPSERT USING LOAD INTO "TEST_TBL" ("A", "B") VALUES (?, ?)
-----------------------------------jdbc:t4jdbc://192.168.1.93:23400/:schema=seabase
2017-09-05 21:02:01.036 +0800 [INFO] (0026:task-0000): Connecting to jdbc:t4jdbc://192.168.1.93:23400/:schema=seabase options {user=trafodion, tcpKeepAlive=true, useCompression=true, rewriteBatchedStatements=true, connectTimeout=300000, socketTimeout=1800000}
connection------------------------------------:org.trafodion.jdbc.t4.TrafT4Connection@38f4c238
2017-09-05 21:02:03.872 +0800 [INFO] (0026:task-0000): Prepared SQL: UPSERT USING LOAD INTO "TEST_TBL" ("A", "B") VALUES (?, ?)
-----------------------------------jdbc:t4jdbc://192.168.1.93:23400/:schema=seabase
2017-09-05 21:02:10.364 +0800 [INFO] (0026:task-0000): Connecting to jdbc:t4jdbc://192.168.1.93:23400/:schema=seabase options {user=trafodion, tcpKeepAlive=true, useCompression=true, rewriteBatchedStatements=true, connectTimeout=300000, socketTimeout=1800000}
connection------------------------------------:org.trafodion.jdbc.t4.TrafT4Connection@6c47ecb4
2017-09-05 21:02:17.565 +0800 [INFO] (0026:task-0000): Prepared SQL: UPSERT USING LOAD INTO "TEST_TBL" ("A", "B") VALUES (?, ?)
2017-09-05 21:02:36.756 +0800 [INFO] (0026:task-0000): SQL: select * from test_tbl2017-09-05 21:02:36.777 +0800 [INFO] (0026:task-0000): > 0.02 seconds
2017-09-05 21:02:36.783 +0800 [INFO] (0026:task-0000): Loading 3 rows
2017-09-05 21:02:36.821 +0800 [INFO] (0026:task-0000): > 0.04 seconds (loaded 3 rows in total)
2017-09-05 21:02:37.653 +0800 [INFO] (0001:transaction): {done: 1 / 1, running: 0}
2017-09-05 21:02:37.665 +0800 [INFO] (main): Committed.
2017-09-05 21:02:37.665 +0800 [INFO] (main): Next config diff: {"in":{},"out":{}}

10 检查Embulk任务执行成功

SQL>select * from test_tbl;A B
---------- ----------
a b
c d
e f--- 3 row(s) selected.

至此,使用Embulk从Oracle抽取数据到Trafodion演示完毕!


推荐阅读
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • Jboss的EJB部署描述符standardjaws.xml配置步骤详解
    本文详细介绍了Jboss的EJB部署描述符standardjaws.xml的配置步骤,包括映射CMP实体EJB、数据源连接池的获取以及数据库配置等内容。 ... [详细]
  • 本文介绍了解决java开源项目apache commons email简单使用报错的方法,包括使用正确的JAR包和正确的代码配置,以及相关参数的设置。详细介绍了如何使用apache commons email发送邮件。 ... [详细]
  • 1、概述首先和大家一起回顾一下Java消息服务,在我之前的博客《Java消息队列-JMS概述》中,我为大家分析了:然后在另一篇博客《Java消息队列-ActiveMq实战》中 ... [详细]
  • 1、问题?项目打包报错;程序包com.sun.image.codec.jpeg不存在;2、原因尚不明确;由于jdk升级问题。才出现的,可能jdk6就不会出现;初步怀疑jdk的问题; ... [详细]
  • rust编程这篇文章是关于我通过解决Twitch上尚未解决的所有CtCI问题来学习Rust的经验。英国科学博物馆集团AdaLovelace的肖像Rust徽标,由Moz ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 使用freemaker生成Java代码的步骤及示例代码
    本文介绍了使用freemaker这个jar包生成Java代码的步骤,通过提前编辑好的模板,可以避免写重复代码。首先需要在springboot的pom.xml文件中加入freemaker的依赖包。然后编写模板,定义要生成的Java类的属性和方法。最后编写生成代码的类,通过加载模板文件和数据模型,生成Java代码文件。本文提供了示例代码,并展示了文件目录结构。 ... [详细]
  • Question该提问来源于开源项目:react-native-device-info/react-native-device-info ... [详细]
  • Hadoop2.6.0 + 云centos +伪分布式只谈部署
    3.0.3玩不好,现将2.6.0tar.gz上传到usr,chmod-Rhadoop:hadophadoop-2.6.0,rm掉3.0.32.在etcp ... [详细]
  • 1.脚本功能1)自动替换jar包中的配置文件。2)自动备份老版本的Jar包3)自动判断是初次启动还是更新服务2.脚本准备进入ho ... [详细]
  • 商品信息|都会_淘淘商城8.6
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了淘淘商城---8.6相关的知识,希望对你有一定的参考价值。继续八月五号写的,今天晚上花点时间开发这个项目& ... [详细]
  • 该楼层疑似违规已被系统折叠隐藏此楼查看此楼binsh:1:usrlocalcuda-9.1:PermissiondeniedMakefile:88:recipefortargeto ... [详细]
author-avatar
彤彤柯安_839
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有