Doris通过ODBC连接SQL Server

本文详细描述了在CentOS系统中安装UnixODBC和freetds,配置它们连接MSSQL数据库,并指导如何在Doris中通过ODBC访问外部数据源,包括源码包安装、配置步骤和常见问题解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.系统环境

[root@hadoop102 etc]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)

2. 安装包

unixODBC :2.3.12

freetds:1.4.10

3. 部署步骤

3.1 源码包安装unixODBC

下载最新的unixODBC源码包,下载url:http://www.unixodbc.org

unixODBC

放置目录下,如:/usr/local,然后执行以下命令:

# 需要root权限
[root@hadoop100 software]# tar -xvf unixODBC-2.3.12.tar.gz -C /usr/local
[root@hadoop100 software]# cd /usr/local/unixODBC-2.3.12/

[root@hadoop100 unixODBC-2.3.12]# sudo ./configure --prefix=/usr/local/unixODBC-2.3.12 --includedir=/usr/local/include --libdir=/usr/local/lib  --bindir=/usr/bin  --sysconfdir=/usr/local/etc 

[root@hadoop100 unixODBC-2.3.12]# sudo make && make install

安装目录为/usr/local/unixODBC-2.3.12,安装成功后,unixODBC所需的头文件都被安装到了/usr/local/include下,编译好的库文件安装到了/usr/local/lib 下,与unixODBC相关的可执行文件安装到了/usr/bin下,配置文件放到了/usr/local/etc下。

若./configure编译过程中出现如下错误信息:

configure: error: no acceptable C compiler found in $PATH

需安装gcc组件,命令如下:

yum -y  install  gcc
# 也可通过二进制安装,命令如下:
yum -y install unixODBC unixODBC-devel

3.2检查unixODBC安装情况

验证安装是否成功

[root@hadoop102 etc]# odbcinst -j
unixODBC 2.3.12
DRIVERS............: /usr/local/etc/odbcinst.ini
SYSTEM DATA SOURCES: /usr/local/etc/odbc.ini
FILE DATA SOURCES..: /usr/local/etc/ODBCDataSources
USER DATA SOURCES..: /root/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

3.3 安装FreeTDS

下载freetds-1.4.10,官网地址:http://www.freetds.org/

FreeTDS

FreeTDS是unix 和Linux library的一个集合,通过FreeTDS可以连接到MicrosoftSQL Server 和 Sybase DB

执行以下命令:

# 需要root权限
[root@hadoop100 software]# tar -xvf freetds-1.4.10.tar.gz -C /usr/local
[root@hadoop100 software]# cd /usr/local/freetds-1.4.10/

# 查看当前支持的 tdsver 版本,选择对应支持的 MSSQL 版本
[root@hadoop100 freetds-1.4.10]# ./configure --help
 --with-tdsver=VERSION   TDS protocol version (5.0/7.1/7.2/7.3/7.4/auto)
# 重编译安装,注意 tdsver 版本

[root@hadoop100 freetds-1.4.10]# sudo ./configure --prefix=/usr/local/freetds --with-unixodbc=/usr/local/unixODBC-2.3.12 --enable-msdblib  --with-tdsver=7.4

[root@hadoop100 freetds-1.4.10]# sudo make && make install

安装参数说明

--prefix=/usr/local/freetds FreeTDS的默认安装目录 /usr/local/freetds
--enable-msdblib 允许Microsoft 的函数库
--with-tdsver=7.4 指定TDS的协议版本,不填写则默认5.0版,7.5支持MSSQL2008和MSSQL2014

3.4 检查FreeTDS安装情况

3.4.1直接连接MSSQL数据库
[root@hadoop102 etc]# /usr/local/freetds/bin/tsql -H 172.26.203.210 -p1433 -Usa -Proot
locale is "zh_CN.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
1> 
2> 
3.4.2查看FreeTDS 版本
[root@hadoop102 etc]# /usr/local/freetds/bin/tsql -C
Compile-time settings (established with the "configure" script)
                            Version: freetds v1.4.10
             freetds.conf directory: /usr/local/freetds/etc # (注意这个路径,修改这个文件配置信息)
     MS db-lib source compatibility: yes
        Sybase binary compatibility: no
                      Thread safety: yes
                      iconv library: yes
                        TDS version: 7.4
                              iODBC: no
                           unixodbc: yes
              SSPI "trusted" logins: no
                           Kerberos: no
                            OpenSSL: no
                             GnuTLS: no
                               MARS: yes
3.4.3配置文件连接

修改freetds.conf文件:在 FreeTDS 的配置文件中添加指向具体数据库的访问信息

[root@hadoop102 etc]# vim /usr/local/freetds/etc/freetds.conf

# 添加如下内容:
[localmssql]
        host = 172.26.203.210
        port = 1433
        tds version = 7.4
        client charset = UTF-8

连接

[root@hadoop102 etc]# /usr/local/freetds/bin/tsql -S localmssql  -U sa  -P root
locale is "zh_CN.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
1> 
3.4.4配置ODBC连接MSSQL

通过odbcinst -j可以查看配置文件路径:/etc/odbc.ini/etc/odbcinst.ini
(有时配置在/usr/local/etc/odbc.ini/usr/local/etc/odbcinst.ini)
在 /etc/odbcinst.ini 中登记FreeTDS驱动

[root@hadoop102 etc]# vim /usr/local/etc/odbcinst.ini

# 添加如下内容:

# Driver from FreeTDS package
# setup from FreeTDS package
# unixodbc驱动名称
[FreeTDS]
# 简介  
Description=ODBC of FreeTDS for MS SQL 2008
# 驱动所在位置
Driver=/usr/local/freetds/lib/libtdsodbc.so

在 /etc/odbc.ini 配置MSSQL数据链接信息

[root@hadoop102 etc]# vim /usr/local/etc/odbc.ini

# 添加如下内容:

[ODBC Data Sources]
local= My second Test DSN

[local]
Driver = /usr/local/freetds/lib/libtdsodbc.so
Description = test
Trace = No
Server = 172.26.203.210
Database = Test
Port = 1433
TDS_Version = 7.4
3.4.5测试ODBC链接
[root@hadoop102 etc]# isql -v local sa root
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| echo [string]                         |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> 

4. Doris 使用ODBC访问外部数据源

4.1 修改Doris BE ODBC配置文件

在doris be conf文件夹中找到 dbcinst.ini文件

在文件中添加SQL Server驱动信息

[root@hadoop102 lib]# vim $DORIS_HOME/be/conf/odbcinst.ini 

# 添加如下内容:
[SQL Server]
Description   = ODBC for SQL Server
Driver      = /usr/local/freetds/lib/libtdsodbc.so
Setup      = /usr/local/freetds/lib/libtds.so
FileUsage    = 1

4.2 不使用Resource方式访问

CREATE EXTERNAL TABLE wb_dim_store4 (
  storeid int NOT NULL,
  storename varchar(25)  NULL,
  address varchar(25)  NULL,
  Maplongitude decimal(18,6) NULL,
  Maplatitude decimal(18,6) NULL
 ) ENGINE=ODBC
 COMMENT "ODBC"
 PROPERTIES (
 "host" = "172.26.203.210",
 "port" = "1433",
 "user" = "sa",
 "password" = "root",
 "database" = "Test",
 "table" = "dim_store",
 "driver" = "SQL Server", -- 注意这里的名称和be下的odbcinst.ini里的SQL Server[]里的名称一致
 "odbc_type" = "sqlserver"
 );
-- 测试结果
select count(*) from wb_dim_store4;

4.3 通过ODBC_Resource来创建ODBC外表 (推荐使用的方式)

首先创建Resource

CREATE EXTERNAL RESOURCE `sqlserver_odbc`
 PROPERTIES (
 "type" = "odbc_catalog",
 "host" = "172.26.203.210",
 "port" = "1433",
 "user" = "sa",
 "password" = "root",
 "database" = "Test",
 "driver" = "SQL Server",  -- 注意这里的名称和be下的odbcinst.ini里的SQL Server[]里的名称一致
 "odbc_type" = "sqlserver"
 );

然后创建 ODBC 外表

CREATE EXTERNAL TABLE wb_dim_store5 (
  storeid int NOT NULL,
  storename varchar(25)  NULL,
  address varchar(25)  NULL,
  Maplongitude decimal(18,6) NULL,
  Maplatitude decimal(18,6) NULL
 ) ENGINE=ODBC
 COMMENT "ODBC"
 PROPERTIES (
 "odbc_catalog_resource" = "sqlserver_odbc",
 "database" = "Test",
 "table" = "dim_store"
 );
-- 测试结果
select count(*) from wb_dim_store5;

5. 问题

5.1 查询外部表报错

select count(*) from wb_dim_store5;     

假如查询上述外部表报以下错误,并且/usr/local/freetds/lib/libtdsodbc.so这个文件存在且已授权777
1064 - errCode = 2, detailMessage = driver connect Error: 01000 [unixODBC][Driver Manager]Can't open lib '/usr/local/freetds/lib/libtdsodbc.so' : file not found (0)

可以使用 ldd 命令来查看库文件的依赖项是否有问题

[root@hadoop102 lib]# ldd /usr/local/freetds/lib/libtdsodbc.so
        linux-vdso.so.1 =>  (0x00007ffd039aa000)
        libodbc.so.2 => not found
        libodbcinst.so.2 => not found
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f720a697000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f720a2c9000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f720ab25000)
# 这个输出表明 libtdsodbc.so 在加载时缺少一些依赖的动态链接库。
# 具体来说,它提示缺少 libodbc.so.2 和 libodbcinst.so.2
# 因此需要重新安装unixODBC

[root@hadoop102 lib]# yum install unixODBC
# yum install -y unixODBC unixODBC-devel libtool-ltdl libtool-ltdl-devel
# 检查unixODBC安装情况
[root@hadoop102 lib]# odbcinst -j
unixODBC 2.3.1
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /root/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

# 重新生成链接库缓存: 重新生成链接库缓存,以确保系统能够找到新安装的库
[root@hadoop102 lib]# ldconfig

[root@hadoop102 lib]# ldd /usr/local/freetds/lib/libtdsodbc.so
        linux-vdso.so.1 =>  (0x00007ffd00930000)
        libodbc.so.2 => /lib64/libodbc.so.2 (0x00007eff06fa3000)
        libodbcinst.so.2 => /lib64/libodbcinst.so.2 (0x00007eff06d91000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007eff06b75000)
        libc.so.6 => /lib64/libc.so.6 (0x00007eff067a7000)
        libltdl.so.7 => /lib64/libltdl.so.7 (0x00007eff0659d000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007eff06399000)
        /lib64/ld-linux-x86-64.so.2 (0x00007eff0747d000)
# 依赖性没有出现not found即可

因为重新安装了unixODBC,需要重新配置一下odbc.iniodbcinst.ini这两个文件

在 /etc/odbc.ini 配置MSSQL数据链接信息
在 /etc/odbcinst.ini 中登记FreeTDS驱动

参考资料

Apache Doris 通过ODBC连接SQL Server

golang:centos使用unixODBC 连接sqlserver2008

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Leo⁵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值