跳到主要内容

如何在 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 中创建的数据库和表

Screenshot 2024-01-01 at 8 25 50 PM

MSSQL 登录用户,sql_user

Screenshot 2024-01-01 at 8 27 11 PM

sql_user 的数据库成员角色

Screenshot 2024-01-01 at 8 27 35 PM

具有登录名的数据库用户

Screenshot 2024-01-01 at 8 35 34 PM

使用 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.

更多信息,请参阅