Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Comment configurer ClickHouse avec Docker et ODBC pour se connecter à une base de données Microsoft SQL Server (MSSQL)

Question

Comment configurer ClickHouse avec une image Docker pour se connecter à Microsoft SQL Server ?

Réponse

Remarques sur cet exemple

  • Utilise l’image Docker Ubuntu de ClickHouse
  • Utilise le driver FreeTDS
  • Utilise MSSQL Server 2012R2
  • Le hostname Windows utilisé dans cet exemple est MARSDB2.marsnet2.local, avec l’adresse IP 192.168.1.133 (remplacez-le par votre hostname et/ou votre adresse IP)
  • Le nom de l’instance MSSQL est MARSDB2
  • Les utilisateurs de connexion et de base de données MSSQL sont sql_user

Exemple de configuration dans MSSQL à des fins de test

Base de données et table créées dans MSSQL :

Structure de la base de données et de la table MSSQL

Compte de connexion MSSQL, sql_user :

Configuration du compte de connexion MSSQL

Rôles de base de données attribués à sql_user :

Rôles de base de données MSSQL attribués

Utilisateur de base de données associé à un compte de connexion :

Utilisateur de base de données MSSQL associé à un compte de connexion

Configurer ClickHouse avec ODBC

Créez un répertoire de travail :

mkdir ch-odbc-mssql
cd ch-odbc-mssql

Créez un fichier odbc.ini :

vim odbc.ini

Ajoutez les entrées suivantes pour mettre à jour le nom du DSN et l’adresse IP :

[marsdb2_mssql]
Driver = FreeTDS
Server = 192.168.1.133

Créez un fichier odbcinst.ini :

vim odbcinst.ini

Ajoutez les entrées suivantes (trace est facultatif, mais facilite le débogage) :

[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

Configurer un Dockerfile pour télécharger l’image et ajouter TDS et les bibliothèques ODBC requises

Créez le Dockerfile :

vim Dockerfile

Ajoutez le contenu du 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

Créez la nouvelle image Docker :

docker build . -t marsnet/clickhouse-odbc:23.10

Créez un fichier docker-compose.yml :

vim docker-compose.yml

Ajoutez le contenu suivant au fichier 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

Démarrez le conteneur :

docker compose up --detach

Une fois le conteneur démarré, vous devriez voir quelque chose comme ceci :

ch-odbc-mssql % docker compose up --detach
[+] Running 1/1
 Container clickhouse-odbc  Started

Vérifiez que le conteneur est bien en cours d’exécution :

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

Tester la connexion ODBC

Connectez-vous à l’aide du client ClickHouse :

./clickhouse client

Testez le SELECT à l’aide de la fonction de table odbc sur la table distante de la base de données MSSQL :

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. 

Vous pouvez également créer une table distante en utilisant le moteur de table 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')

Utilisez une requête SELECT pour tester la nouvelle table distante :

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. 

Pour en savoir plus, consultez :

Navigation