Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

مصدر القاموس ODBC

يمكنك استخدام هذه الطريقة للاتصال بأي قاعدة بيانات لديها برنامج تشغيل 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 استعلام مخصص. اختياري.

يتلقى ClickHouse رموز التنصيص من برنامج تشغيل ODBC، ويضع جميع الإعدادات بين علامتَي اقتباس في الاستعلامات المرسلة إلى برنامج تشغيل، لذلك من الضروري ضبط اسم table بما يتوافق مع حالة الأحرف في اسم الجدول داخل قاعدة البيانات.

إذا واجهت مشكلات في الترميز عند استخدام Oracle، فراجع عنصر FAQ المقابل.

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

مثال على استخدام غير آمن

لنقم بتهيئة 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)
Navigation