如何在 Docker 上设置 ClickHouse 并使用 ODBC 连接到 Microsoft SQL Server (MSSQL) 数据库
·3 分钟阅读
如何在 Docker 上设置 ClickHouse 并使用 ODBC 连接到 Microsoft SQL Server (MSSQL) 数据库
问题
如何设置带有 Docker 镜像的 ClickHouse 以连接到 Microsoft SQL Server?
答案
关于此示例的注意事项
- 使用 ClickHouse Docker Ubuntu 镜像
- 使用 FreeTDS 驱动程序
- 使用 MSSQL Server 2012R2
- 此示例的 Windows 主机名为
MARSDB2.marsnet2.local
,IP 地址为:192.168.1.133
(使用您的主机名和/或 IP 地址更新) - MSSQL 实例名称
MARSDB2
- MSSQL 登录名和数据库用户为
sql_user
MSSQL 中用于测试的示例设置
在 MSSQL 中创建的数据库和表
MSSQL 登录用户,sql_user
sql_user
的数据库成员角色
具有登录名的数据库用户
使用 ODBC 配置 ClickHouse
创建一个工作目录
mkdir ch-odbc-mssql
cd ch-odbc-mssql
创建一个 odbc.ini
文件
vim odbc.ini
添加以下条目以更新 DSN 和 IP 的名称
[marsdb2_mssql]
Driver = FreeTDS
Server = 192.168.1.133
创建一个 odbcinst.ini
文件
vim odbcinst.ini
添加以下条目(trace 是可选的,但有助于调试)
[ODBC]
Trace = Yes
TraceFile = /tmp/odbc.log
[FreeTDS]
Description = FreeTDS
Driver = /usr/lib/aarch64-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
UsageCount = 1
配置 Dockerfile 以下载镜像并添加 TDS 和所需的 ODBC 库
创建 Dockerfile
vim Dockerfile
添加 Dockerfile 的内容
FROM clickhouse/clickhouse-server:23.10
# Install the ODBC driver
RUN apt-get update && apt-get install -y --no-install-recommends unixodbc \
&& apt-get install -y freetds-bin freetds-common freetds-dev libct4 libsybdb5 \
&& apt-get install tdsodbc
构建新的 docker 镜像
docker build . -t marsnet/clickhouse-odbc:23.10
创建一个 docker-compose.yml
文件
vim docker-compose.yml
将以下内容添加到 YAML
version: '3.7'
services:
clickhouse:
image: marsnet/clickhouse-odbc:23.10
container_name: clickhouse-odbc
hostname: clickhouse-host
ports:
- "9000:9000"
- "8123:8123"
- "9009:9009"
volumes:
- ./odbc.ini:/etc/odbc.ini
- ./odbcinst.ini:/etc/odbcinst.ini
restart: always
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 262144
hard: 262144
deploy:
resources:
limits:
memory: 4g
启动容器
docker compose up --detach
启动容器后,您应该看到类似这样的内容
ch-odbc-mssql % docker compose up --detach
[+] Running 1/1
✔ Container clickhouse-odbc Started
检查以确保容器正在运行
ch-odbc-mssql % docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
87a400b803ce marsnet/clickhouse-odbc:23.10 "/entrypoint.sh" 57 minutes ago Up About a minute 0.0.0.0:8123->8123/tcp, 0.0.0.0:9000->9000/tcp, 0.0.0.0:9009->9009/tcp clickhouse-odbc
测试 ODBC 连接
使用 ClickHouse 客户端登录
./clickhouse client
使用 odbc
表函数测试到远程 MSSQL 数据库表的 SELECT
clickhouse-host :) SELECT * from odbc('DSN=marsdb2_mssql;port=1433;Uid=sql_user;Pwd=ClickHouse123;Database=db1', 'table1');
SELECT *
FROM odbc('DSN=marsdb2_mssql;port=1433;Uid=sql_user;Pwd=ClickHouse123;Database=db1', 'table1')
Query id: 23494da2-6e12-4ade-95fa-372a0420cac1
┌─id─┬─column1─┐
│ 1 │ abc │
│ 2 │ def │
│ 3 │ ghi │
└────┴─────────┘
3 rows in set. Elapsed: 0.188 sec.
您还可以使用 odbc
表引擎创建远程表
CREATE TABLE table1_odbc_mssql
(
`id` Int32,
`column1` String
)
ENGINE = ODBC('DSN=marsdb2_mssql;port=1433;Uid=sql_user;Pwd=ClickHouse123;Database=db1', 'dbo', 'table1')
使用 SELECT
查询测试新的远程表
clickhouse-host :) select * from table1_odbc_mssql;
SELECT *
FROM table1_odbc_mssql
Query id: 94724368-485d-4364-ae58-a435a225c37d
┌─id─┬─column1─┐
│ 1 │ abc │
│ 2 │ def │
│ 3 │ ghi │
└────┴─────────┘
3 rows in set. Elapsed: 0.218 sec.
更多信息,请参阅