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─┐
│ 1 │ 18 │ a │
│ 2 │ 18 │ b │
│ 3 │ 18 │ c │
│ 4 │ 18 │ 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基本步骤为
- 编写odbc.ini文件
- isql测试连接
- 建立适配数据库列类型的表
- 数据获取完成