Clickhouse通过odbc连接获取Mysql/Oracle数据

374 阅读2分钟

Clickhouse通过odbc连接获取Mysql/Oracle数据

@[toc]

引言

  • odbc: 通过odbc的方式来连接到外部数据库,为实现这连接,需要借助unixODBC这一组件

unixODBC ​ unixODBC是一个来连接数据库的组件,该版本主要支持64位的SQLLEN,能让你在UNIX/Linux系统下使用ODBC。


odbc使用步骤

1.安装依赖环境

sudo yum install openssl unixODBC
sudo yum install openssl libiodbc

2.下载mysql ODBC驱动程序

# 在线访问 https://cdn.mysql.com//Downloads/Connector-ODBC/5.3/mysql-connector-odbc-5.3.14-1.e17.x86_64.rpm

#解压
rpm -ivh mysql-connector-odbc-5.3.14-1.e17.x86_64.rpm

# 找到mysql-connector-odbc-5.3.14-1.e17.x86_64安装目录
rpm -ql mysql-connector-odbc-5.3.14-1.el7.x86_64
/usr/bin/myodbc-installer
/usr/lib64/libmyodbc5a.so
/usr/lib64/libmyodbc5w.so 	#连接mysql所需要的驱动 
/usr/share/doc/mysql-connector-odbc-5.3.14
/usr/share/doc/mysql-connector-odbc-5.3.14/ChangeLog
/usr/share/doc/mysql-connector-odbc-5.3.14/LICENSE.txt
/usr/share/doc/mysql-connector-odbc-5.3.14/README.txt

3.修改配置文件

#编写odbc.ini
vi /etc/odbc.ini

#添加以下内容,其中mysql为别名,其余各个自行参数替换

[mysql]
DRIVER = /usr/lib64/libmyodbc5w.so
SERVER = 0.0.0.0
PORT = 3306
DATABASE = test
USERNAME = root
PASSWORD = root


4. 检查连接

# mysql 为odbc.ini中起的别名
isql -v mysql

#显示如下即连接成功
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> 

5.用例测试

mysql源数据

-- 创建mysql测试表
CREATE TABLE `tablea` (
  `id` int(11) NOT NULL,
  `age` int(11) DEFAULT NULL,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 插入数据
INSERT INTO `tablea` values(1,18,a),(2,18,b),(3,18,c),(4,18,d);

clickhouse目标数据

/* 说明
clickhouse建表时的列 和 mysql表中的列 关系为 真包含 关系;即clickhouse中的列必须为mysql中已存在的列,然则会报错
且得将mysql中的列类型适配为clickhouse的列类型,然则也会出错
ODBC引擎参数为(bridge别名,测试库名,测试表名)
*/

-- 读取mysql表中id,age,name列
-- 创建clickhouse测试表
CREATE TABLE odbc_table1
(
    `id` Int32,
    `age` Int32,
    `name` String
)
ENGINE = ODBC('DSN=mysql', 'test', 'tablea') 

-- 查看odbc_table1表数据
SELECT *
FROM odbc_table1

┌─id─┬─age─┬─name─┐
│  118 │ a    │
│  218 │ b    │
│  318 │ c    │
│  418 │ d    │
└────┴─────┴──────┘

4 rows in set. Elapsed: 0.002 sec. 
-- 数据读取成功

除表引擎第一个指定参数不一样外,odbc和jdbc在数据操作上基本一致,这里不做过多测试介绍

JDBC引擎参数:ENGINE = JDBC('mysql', 'test', 'tablea')

ODBC引擎参数:ENGINE =ODBC('DSN=mysql', 'test', 'tablea')

连接oracle除驱动不一样外,其余步骤基本一致

mysql驱动包为mysql-connector-odbc-5.3.14-1.e17.x86_64.rpm,驱动为libmyodbc5w.so

oracle驱动包为oracle-instantclient11.2-odbc-11.2.0.4.0-1.x86_64.rpm,oracle-instantclient19.8-basiclite-19.8.0.0.0-1.x86_64.rpm,驱动为libsqora.so.11.1


总结

使用unixODBC连接mysql/oracle基本步骤为

  1. 编写odbc.ini文件
  2. isql测试连接
  3. 建立适配数据库列类型的表
  4. 数据获取完成