如何用odb从Oracle数据库导数据到Apache Trafodion数据库

2 篇文章 0 订阅
2 篇文章 0 订阅

odb是Apache Trafodion自带的一款轻量级、高性能、基于ODBC的面向命令行的ETL工具, 今天来看看如何用odb从Oracle导数据到Trafodion数据库, 包含以下步骤:

目录

一、安装odb

1.下载安装包 

2. 安装unixODBC

3. 安装Trafodion ODBC驱动

4.安装odb

二、配置数据源

2.1 确认配置文件路径

2.2 配置驱动信息

2.3 配置连接信息 

三、基本使用方法

3.1 使用帮助

 3.2 查看可用数据源

 3.3 分别创建一张oracle表和trafodion表

 3.4 往oracle数据库插入一些测试数据

 3.5 将数据从Oracle导到Trafodion

 3.6 验证结果

四、影响性能的参数

4.1 parallel 

4.2 rows

 4.3 loadcmd 

五、编码问题


一、安装odb

1.下载安装包 

有两种方式可以获取odb的安装包:

1.1 官网下载, 下载地址:http://www.apache.org/dyn/closer.lua/trafodion/apache-trafodion-2.2.0/bin/apache-trafodion_clients-2.2.0-RH6-x86_64.tar.gz

1.2. 自己编译, 参考我之前的博客:在Centos 7.6上编译Apache Trafodion

2. 安装unixODBC

odb依赖unixODBC, 所以还需要安装unixODBC。 unixODBC有两种安装方法:

1. yum install -y unixODBC, 这种方法安装的unixODBC版本可能比较老旧。

2. 到官网下载源码, 自己编译安装。下载地址:http://www.unixodbc.org/

tar xf unixODBC-2.3.7.tar.gz
cd unixODBC-2.3.7
mkdir ~/local/unixODBC
./configure --prefix=$HOME/local/unixODBC --disable-gui --enable-threads --disable-drivers
make && make install

export ODBCHOME=$HOME/local/unixODBC
export ODBCSYSINI=$ODBCHOME/etc
export ODBCINI=$ODBCSYSINI/odbc.ini
export LD_LIBRARY_PATH=$ODBCHOME/lib:$LD_LIBRARY_PATH
export PATH=$ODBCHOME/bin:$PATH

odbcinst -j

3. 安装Trafodion ODBC驱动

参考了:https://trafodion.apache.org/docs/client_install/index.html#odbc-linux-install

这里用的是自己编译的驱动, apache-trafodion_clients-2.4.0-RH-x86_64-debug.tar.gz, 里面包含了ODBC的安装包和odb的安装包

tar xf apache-trafodion_clients-2.4.0-RH-x86_64-debug.tar.gz
cd clients/
tar xf TRAF_ODBC_Linux_Driver_64.tar.gz
cd PkgTmp/
mkdir -p ~/local/trafodion/odbc
./install.sh

根据安装脚本提示填入信息, 例如

Do you accept the terms of the license (YES/NO): YES
Thank You....
Proceeding with install

ENTER a directory for library files
OR hit Enter to use the default [/usr/lib64] : /home/sujinpei/local/trafodion/odbc/lib64

ENTER a directory for datasource template file
OR hit Enter to use the default [/etc/odbc] : /home/sujinpei/local/trafodion/odbc

ENTER a directory for sample
OR hit Enter to use the default [/etc/odbc] : /home/sujinpei/local/trafodion/odbc

TRAFODBC driver has successfully been installed.
  * Library libtrafodbc_l64_drvr.so is installed on /home/sujinpei/local/trafodion/odbc/lib64
  * data source template file TRAFDSN has been copied onto /home/sujinpei/local/trafodion/odbc
  * sample file has been copied onto /home/sujinpei/local/trafodion/odbc

设置环境变量

export LD_LIBRARY_PATH=$HOME/local/trafodion/odbc/lib64:$LD_LIBRARY_PATH

4.安装odb

回到clients目录

mkdir ~/local/trafodion/odb
tar xf odb64_linux.tar.gz -C ~/local/trafodion/odb
export PATH=$HOME/local/trafodion/odb/bin:$PATH
odb64luo -version

二、配置数据源

如何安装Oracle ODBC的驱动及配置数据源, 请参考我之前的博客:如何在CentOS 7上安装配置Oracle ODBC驱动链接Oracle数据库

这里演示如何配置Trafodion的数据源

2.1 确认配置文件路径

odbcinst -j
unixODBC 2.3.7
DRIVERS............: /home/sujinpei/local/unixODBC/etc/odbcinst.ini
SYSTEM DATA SOURCES: /home/sujinpei/local/unixODBC/etc/odbc.ini
FILE DATA SOURCES..: /home/sujinpei/local/unixODBC/etc/ODBCDataSources
USER DATA SOURCES..: /home/sujinpei/local/unixODBC/etc/odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

2.2 配置驱动信息

在odbcinst.ini文件里添加如下信息

[Trafodion]
Description             = Trafodion ODBC Stand Alone Driver
Driver                  = /home/sujinpei/local/trafodion/odbc/lib64/libtrafodbc_drvr64.so
FileUsage               = 1
UsageCount              = 1
Threading               = 1

2.3 配置连接信息 

在odbc.ini里添加如下信息

[traf]
Description = data source connect to Trafodion
Driver = Trafodion
Catalog = TRAFODION
Schema = SEABASE
DataLang = 0
FetchBufferSize = SYSTEM_DEFAULT
Server = TCP:10.10.23.20:23400
clientCharSet = utf-8
SQL_ATTR_CONNECTION_TIMEOUT = SYSTEM_DEFAULT
SQL_LOGIN_TIMEOUT = SYSTEM_DEFAULT
SQL_QUERY_TIMEOUT = NO_TIMEOUT
ServiceName = TRAFODION_DEFAULT_SERVICE

三、基本使用方法

3.1 使用帮助

odb64luo -h

 3.2 查看可用数据源

odb64luo -lsdsn

 3.3 分别创建一张oracle表和trafodion表

odb64luo -d orac -u odb -p odb -x "create table testcopy(id int, name char(20))"
odb64luo -d orac -u odb -p odb -x "create table testcopy(id int, name char(20))"

 3.4 往oracle数据库插入一些测试数据

odb64luo -d orac -u odb -p odb -x "insert into testcopy values(1, 'hello')"
odb64luo -d orac -u odb -p odb -x "insert into testcopy values(2, 'world')"

 3.5 将数据从Oracle导到Trafodion

odb64luo -d orac:traf -u odb:trafodion -p odb:traf123 -cp src=testcopy:tgt=testcopy

 3.6 验证结果

odb64luo -d traf -u trafodion -p traf123 -x "select * from testcopy"

四、影响性能的参数

4.1 parallel 

parallel指定用多少组线程进行数据拷贝, parallel不是越大越好。 根据服务器配置合理的设置parallel可以达到最佳的性能。

odb64luo -d orac:traf -u odb:trafodion -p odb:traf123 -cp src=testcopy:tgt=testcopy:parallel=8

4.2 rows

rows指定odb一次提交多少数据量, 有两种设置方法:

4.2.1 rows=10000, 表示最多10000行提交一次。

odb64luo -d orac:traf -u odb:trafodion -p odb:traf123 -cp src=testcopy:tgt=testcopy:parallel=8:rows=10000

 4.2.2 rows=M128, 表示最大128M的数据量提交一次

odb64luo -d orac:traf -u odb:trafodion -p odb:traf123 -cp src=testcopy:tgt=testcopy:parallel=8:rows=M128

 4.3 loadcmd 

loadcmd指定odb用那种加载方式, loadcmd=UL会使用UPSERT USING LOAD语句, 通常这种方式可以得到最佳的性能。

odb64luo -d orac:traf -u odb:trafodion -p odb:traf123 -cp src=testcopy:tgt=testcopy:rows=M128:parallel=10:loadcmd=UL

五、编码问题

从Oracle导数据到Trafodion数据库, 如果有中文字符,通常会涉及到编码转换。Trafodion推荐用utf-8存储中文, 源数据库的中文数据编码如果不是utf-8编码, 最终需要转换成utf8编码存储到Trafodion数据库。Oracle的ODBC驱动和Trafodion的ODBC驱动都支持编码转换, 都有相应的参数配置, 如果配置不好就会出现导入数据为乱码或是编码转换报错的情况。

控制Oracle ODBC驱动拿到的数据编码的参数是一个环境变量:NLS_LANG

告诉Trafodion ODBC驱动客户端的数据是什么编码的参数是DSN的配置项:ClientCharSet

下图是odb从Oracle导数据导Trafodion的简单数据流图

 从上图可以看出, odb本身并不会修改数据编码, 乱码问题通常会出现在Trafodion ODBC尝试将ClientCharSet指定编码的数据转换成utf8, 比如 export NLS_LANG="Simplified Chinese_china".ZHS16GBK, 但是在Trafodion的数据源却设置了ClientCharSet=utf-8, 结果就导致了编码错乱。

所以, 解决编码问题的关键就是保证NLS_LANG的编码和ClientCharSet指定的编码一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值