Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

ODBC を使用して Docker 上の ClickHouse を 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 のデータベースとテーブル構造

MSSQL のログインユーザー sql_user:

MSSQL のログインユーザー設定

sql_user のデータベース メンバーシップ ロール:

MSSQL のデータベース メンバーシップ ロール

ログインに関連付けられたデータベースユーザー:

ログインに関連付けられた MSSQL データベースユーザー

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

イメージをダウンロードし、TDS と必要な ODBC ライブラリを追加するよう Dockerfile を設定する

Dockerfile を作成します。

vim Dockerfile

Dockerfileの内容を追記します:

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

詳細については、以下をご覧ください。

Navigation