Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

كيفية إعداد ClickHouse على Docker باستخدام ODBC للاتصال بقاعدة بيانات Microsoft SQL Server (MSSQL)

السؤال

كيف أُعِدّ ClickHouse باستخدام صورة Docker للاتصال بـ 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 مرتبط بتسجيل دخول

تهيئة ClickHouse باستخدام ODBC

أنشئ مجلد عمل:

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 client:

./clickhouse client

اختبر الاستعلام SELECT باستخدام odbc table function على جدول قاعدة بيانات 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. 

يمكنك أيضًا إنشاء جدول بعيد باستخدام محرك الجدول 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