Apache Doris通过外部表同步数据
Doris 可以创建通过 ODBC 协议访问的外部表。创建完成后,可以通过 SELECT 语句直接查询外部表的数据,也可以通过 INSERT INTO SELECT
的方式导入外部表的数据。
本文档主要介绍如何创建通过 ODBC 协议访问的外部表,以及如何导入这些外部表的数据。目前支持的数据源包括:
- MySQL
- Oracle
- PostgreSQL
ODBC驱动安装
5.3 驱动
1.下载5.3版本的MySQL的odbc驱动
所以准备了一个5.3版本的驱动
-
Doirs所在的Docker安装unixODBC
因为mysql-odbc依赖unixodbc
yum install unixODBC.x86_64 -y yum install unixODBC-devel.x86_64 -y
-
安装MySQL的odbc驱动
先将安装包从宿主机拷贝到docker节点上
hejiahao@mounthua:~/package$ docker cp mysql-connector-odbc-5.3.14-linux-glibc2.12-x86-64bit.tar 757c1cfcaa55:/opt
hejiahao@mounthua:~/package$
解压
tar -xvf mysql-connector-odbc-5.3.14-linux-glibc2.12-x86-64bit.tar
拷贝
cd mysql-connector-odbc-5.3.14-linux-glibc2.12-x86-64bit cp lib/* /usr/lib64
lib下面有两个文件
- 5a是ansi编码
- 5w是Unicode编码
由此可见,Doris需要的是Unicode编码的文件,也就是5w那个文件
[root@757c1cfcaa55 mysql-connector-odbc-5.3.14-linux-glibc2.12-x86-64bit]# cd bin ./myodbc-installer -d -a -n "MySQL ODBC 5.3 Driver" -t "DRIVER=/usr/lib64/libmyodbc5w.so;SETUP=/usr/lib64/libmyodbc5w.so"
[root@757c1cfcaa55 bin]#
4.为每一台Doris的BE节点配置MySQL的ODBC
进入be的conf目录,有个odbcinst.ini文件
cd output/be/conf/
vim odbcinst.ini
修改MySQL的相关配置
# Setup from the unixODBC package
[MySQL ODBC 5.3 Unicode Driver]
Description = ODBC for MySQL
Driver = /usr/lib64/libmyodbc5w.so
FileUsage = 1
配置完以后重启BE即可,所有BE节点操作一样
8.0 驱动
- 下载地址
https://downloads.mysql.com/archives/get/p/10/file/mysql-connector-odbc-8.0.11-1.el7.x86_64.rpm
- 然后执行
yum localinstall -y mysql-connector-odbc-8.0.11-1.el7.x86_64.rpm
- 配置驱动
vim /etc/odbcinst.ini
[MySQL]
Description=ODBC for MySQL
Driver=/usr/lib/libmyodbc5.so
Setup=/usr/lib/libodbcmyS.so
Driver64=/usr/lib64/libmyodbc5.so
Setup64=/usr/lib64/libodbcmyS.so
FileUsage=1
[MySQL ODBC 8.0 Unicode Driver]
Driver=/usr/lib64/libmyodbc8w.so
UsageCount=1
[MySQL ODBC 8.0 ANSI Driver]
Driver=/usr/lib64/libmyodbc8a.so
UsageCount=1
- 测试驱动
vim /etc/odbc.ini
[mysql]
Description = Data source MySQL
Driver = MySQL ODBC 8.0 Driver
Server = 192.168.1.120
Host = 192.168.1.120
Database = dbname
Port = 3306
User = root
Password = 123456
一般是通过uncode 方式连接,Driver 必须是MySQL ODBC 8.0 Driver ,
其他参数按mysql server 的设置。Database 选择已经建立好的数据库。
[root@757c1cfcaa55 be]# isql -v mysql
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>
一切正常
配置Doris be ODBC
Doris 使用ODBC连接mysql或者其他数据库,只需要在BE节点安装和配置ODBC即可
修改BE节点odbc配置信息
├── bin
│ ├── be.pid
│ ├── start_be.sh
│ └── stop_be.sh
├── conf
│ ├── be.conf
│ └── odbcinst.ini //修改这个文件的配置信息
├── lib
│ ├── meta_tool
│ ├── palo_be
│ ├── small_file
│ ├── udf
│ └── udf-runtime
示例:
我这里只使用了Mysql
# Driver from the postgresql-odbc package
# Setup from the unixODBC package
[PostgreSQL]
Description = ODBC for PostgreSQL
Driver = /usr/lib/psqlodbc.so
Setup = /usr/lib/libodbcpsqlS.so
FileUsage = 1
# Driver from the mysql-connector-odbc package
# Setup from the unixODBC package
#[MySQL ODBC 8.0 Unicode Driver]
#Description = ODBC for MySQL
#Driver = /usr/lib64/libmyodbc8w.so
#FileUsage = 1
[MySQL Driver]
Description = ODBC for MySQL
Driver = /usr/lib/libmyodbc8a.so
FileUsage = 1
# Driver from the oracle-connector-odbc package
# Setup from the unixODBC package
[Oracle 19 ODBC driver]
Description=Oracle ODBC driver for Oracle 19
Driver=/usr/lib/libsqora.so.19.1
配置完以后重启BE即可,所有BE节点操作一样
创建外部表
创建 MySQL外部表的详细介绍请参阅 CREATE ODBC TABLE 语法帮助手册。
这里仅通过示例说明使用方式。
-
创建 MySQLResource
MySQLResource 的目的是用于统一管理外部表的连接信息。
CREATE EXTERNAL RESOURCE `mysql_odbc` PROPERTIES ( "type" = "odbc_catalog", "host" = "192.168.50.173", "port" = "3306", "user" = "root", "password" = "root", "driver" = "MySQL Driver", "odbc_type" = "mysql" );
这里我们创建了一个名为
mysql_odbc
的 Resource,其类型为odbc_catalog
,表示这是一个用于存储 ODBC 信息的 Resource。odbc_type
为mysql
,表示这个 OBDC Resource 是用于连接 mysql 数据库的。关于其他类型的资源,具体可参阅 资源管理 文档。 -
创建外部表
CREATE EXTERNAL TABLE `external_rds_test` (
id BIGINT,
user_id INT,
name VARCHAR(20),
age INT,
password VARCHAR(20)
) ENGINE=ODBC
COMMENT "ODBC"
PROPERTIES (
"odbc_catalog_resource" = "mysql_odbc",
"database" = "lining_olap",
"table" = "test"
);
这里我们创建一个 external_rds_test
外部表,并引用了之前创建的 mysql_odbc
Resource
查询数据
mysql> select * from external_rds_test;
+------+---------+---------+------+----------+
| id | user_id | name | age | password |
+------+---------+---------+------+----------+
| 1 | 1111 | 3dasasd | 123 | 3123213 |
+------+---------+---------+------+----------+
1 row in set (0.06 sec)
mysql>