الانتقال إلى المحتوى الرئيسي
يمكنك استخدام هذه الطريقة للاتصال بأي قاعدة بيانات لديها برنامج تشغيل ODBC. مثال على الإعدادات:
SOURCE(ODBC(
    db 'DatabaseName'
    table 'SchemaName.TableName'
    connection_string 'DSN=some_parameters'
    invalidate_query 'SQL_QUERY'
    query 'SELECT id, value_1, value_2 FROM db_name.table_name'
))

حقول الإعدادات:
الإعدادالوصف
dbاسم قاعدة البيانات. احذفه إذا كان اسم قاعدة البيانات محددًا في معلمات <connection_string>.
tableاسم الجدول والمخطط إذا وُجد.
connection_stringسلسلة الاتصال.
invalidate_queryاستعلام للتحقق من حالة القاموس. اختياري. اقرأ المزيد في قسم Refreshing dictionary data using LIFETIME.
background_reconnectأعد الاتصال بالنسخة المتماثلة في الخلفية إذا فشل الاتصال. اختياري.
queryاستعلام مخصص. اختياري.
لا يمكن استخدام الحقلين table وquery معًا. ويجب التصريح بأحد الحقلين table أو query.
يتلقى ClickHouse رموز التنصيص من برنامج تشغيل ODBC، ويضع جميع الإعدادات بين علامتَي اقتباس في الاستعلامات المرسلة إلى driver، لذلك من الضروري ضبط اسم table بما يتوافق مع حالة الأحرف في اسم الجدول داخل قاعدة البيانات. إذا واجهت مشكلات في الترميز عند استخدام Oracle، فراجع عنصر FAQ المقابل.

الثغرة الأمنية المعروفة في وظيفة قاموس ODBC

عند الاتصال بقاعدة البيانات عبر معلمة الاتصال Servername في برنامج تشغيل ODBC، يمكن استبدالها. في هذه الحالة، تُرسَل القيمتان USERNAME وPASSWORD من odbc.ini إلى الخادم البعيد، وقد تتعرضان للاختراق.
مثال على استخدام غير آمن لنقم بتهيئة unixODBC لـ PostgreSQL. محتوى /etc/odbc.ini:
[gregtest]
Driver = /usr/lib/psqlodbca.so
Servername = localhost
PORT = 5432
DATABASE = test_db
#OPTION = 3
USERNAME = test
PASSWORD = test
إذا أجريت استعلامًا بعد ذلك مثل
SELECT * FROM odbc('DSN=gregtest;Servername=some-server.com', 'test_db');
سيرسل برنامج تشغيل ODBC القيمتين USERNAME وPASSWORD من odbc.ini إلى some-server.com.

مثال على الاتصال بـ PostgreSQL

نظام التشغيل Ubuntu. تثبيت unixODBC وبرنامج تشغيل ODBC لـ PostgreSQL:
$ sudo apt-get install -y unixodbc odbcinst odbc-postgresql
تهيئة /etc/odbc.ini (أو ~/.odbc.ini إذا سجّلت الدخول تحت حساب المستخدم الذي يُشغّل ClickHouse):
    [DEFAULT]
    Driver = myconnection

    [myconnection]
    Description         = PostgreSQL connection to my_db
    Driver              = PostgreSQL Unicode
    Database            = my_db
    Servername          = 127.0.0.1
    UserName            = username
    Password            = password
    Port                = 5432
    Protocol            = 9.3
    ReadOnly            = No
    RowVersioning       = No
    ShowSystemTables    = No
    ConnSettings        =
إعدادات القاموس في ClickHouse:
CREATE DICTIONARY table_name (
    id UInt64,
    some_column UInt64 DEFAULT 0
)
PRIMARY KEY id
SOURCE(ODBC(connection_string 'DSN=myconnection' table 'postgresql_table'))
LAYOUT(HASHED())
LIFETIME(MIN 300 MAX 360)

قد تحتاج إلى تعديل odbc.ini لتحديد المسار الكامل للمكتبة في برنامج التشغيل DRIVER=/usr/local/lib/psqlodbcw.so.

مثال على الاتصال بـ MS SQL Server

نظام التشغيل Ubuntu. تثبيت برنامج تشغيل ODBC للاتصال بـ MS SQL:
$ sudo apt-get install tdsodbc freetds-bin sqsh
إعداد برنامج التشغيل:
    $ cat /etc/freetds/freetds.conf
    ...

    [MSSQL]
    host = 192.168.56.101
    port = 1433
    tds version = 7.0
    client charset = UTF-8

    # test TDS connection
    $ sqsh -S MSSQL -D database -U user -P password

    $ cat /etc/odbcinst.ini

    [FreeTDS]
    Description     = FreeTDS
    Driver          = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
    Setup           = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so
    FileUsage       = 1
    UsageCount      = 5

    $ cat /etc/odbc.ini
    # $ cat ~/.odbc.ini # if you signed in under a user that runs ClickHouse

    [MSSQL]
    Description     = FreeTDS
    Driver          = FreeTDS
    Servername      = MSSQL
    Database        = test
    UID             = test
    PWD             = test
    Port            = 1433

    # (optional) test ODBC connection (to use isql-tool install the [unixodbc](https://packages.debian.org/sid/unixodbc)-package)
    $ isql -v MSSQL "user" "password"
ملاحظات:
  • لتحديد أقدم إصدار من TDS يدعمه إصدار معيّن من SQL Server، راجع وثائق المنتج أو اطّلع على سلوك منتج MS-TDS
إعداد القاموس في ClickHouse:
CREATE DICTIONARY test (
    k UInt64,
    s String DEFAULT ''
)
PRIMARY KEY k
SOURCE(ODBC(table 'dict' connection_string 'DSN=MSSQL;UID=test;PWD=test'))
LAYOUT(FLAT())
LIFETIME(MIN 300 MAX 360)
آخر تعديل في ٢٥ يونيو ٢٠٢٦