질문
Docker image를 사용해 Microsoft SQL Server에 연결하도록 ClickHouse를 설정하려면 어떻게 해야 합니까?
답변
이 예시에 대한 참고 사항
- ClickHouse Docker Ubuntu 이미지를 사용합니다
- FreeTDS Driver를 사용합니다
- MSSQL Server 2012R2를 사용합니다
- 이 예시에서 Windows 호스트명은
MARSDB2.marsnet2.local이고 IP는192.168.1.133입니다(환경에 맞게 호스트명 및/또는 IP를 수정하십시오) - MSSQL 인스턴스 이름은
MARSDB2입니다 - MSSQL 로그인 및 DB 사용자는
sql_user입니다
테스트를 위한 MSSQL 예시 설정
MSSQL에서 생성한 데이터베이스 및 테이블:

MSSQL 로그인 사용자 sql_user:

sql_user의 데이터베이스 멤버십 역할:

로그인이 연결된 데이터베이스 사용자:

ODBC로 ClickHouse 구성하기
작업 디렉터리를 생성합니다:
mkdir ch-odbc-mssql
cd ch-odbc-mssqlodbc.ini 파일을 생성하세요:
vim odbc.ini다음 항목을 추가하여 DSN 이름과 IP를 업데이트하세요.
[marsdb2_mssql]
Driver = FreeTDS
Server = 192.168.1.133odbcinst.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이미지를 다운로드하고 TDS 및 필수 ODBC 라이브러리를 추가하도록 Dockerfile 구성하기
Dockerfile을 생성합니다:
vim DockerfileDockerfile에 다음 내용을 추가합니다:
FROM clickhouse/clickhouse-server:23.10
# ODBC 드라이버 설치
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.10docker-compose.yml 파일을 만드세요:
vim docker-compose.ymlYAML에 다음 내용을 추가하세요:
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-odbcODBC 연결 테스트
ClickHouse client로 로그인합니다:
./clickhouse client원격 MSSQL 데이터베이스의 테이블에 odbc 테이블 함수를 사용한 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. 자세한 내용은 다음 링크를 참조하십시오: