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 딕셔너리 상태를 확인하는 쿼리입니다. 선택 사항입니다. 자세한 내용은 LIFETIME를 사용한 딕셔너리 데이터 갱신 섹션을 참조하십시오.
background_reconnect 연결에 실패하면 백그라운드에서 레플리카에 다시 연결합니다. 선택 사항입니다.
query 사용자 지정 쿼리입니다. 선택 사항입니다.

ClickHouse는 ODBC 드라이버로부터 따옴표 문자를 받아 드라이버로 전송하는 쿼리의 모든 설정값을 인용하므로, 데이터베이스의 테이블 이름 대소문자에 맞게 테이블 이름을 설정해야 합니다.

Oracle 사용 시 인코딩 문제가 발생하면 해당 FAQ 항목을 참조하십시오.

ODBC 딕셔너리 기능의 알려진 취약점

안전하지 않은 사용 예시

PostgreSQL용 unixODBC를 구성해 보겠습니다. /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 드라이버는 odbc.ini에 있는 USERNAMEPASSWORD 값을 some-server.com으로 전송합니다.

PostgreSQL 연결 예시

Ubuntu OS.

PostgreSQL용 unixODBC 및 ODBC 드라이버 설치:

$ sudo apt-get install -y unixodbc odbcinst odbc-postgresql

/etc/odbc.ini 구성(ClickHouse를 실행하는 사용자 계정으로 로그인한 경우 ~/.odbc.ini):

    [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)

드라이버 DRIVER=/usr/local/lib/psqlodbcw.so를 사용해 라이브러리의 전체 경로를 지정하려면 odbc.ini를 수정해야 할 수 있습니다.

MS SQL Server 연결 예시

Ubuntu 운영체제.

MS SQL Server에 연결하기 위한 ODBC 드라이버 설치:

$ 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"

참고:

  • 특정 SQL Server 버전에서 지원되는 가장 낮은 TDS 버전을 확인하려면 제품 설명서를 참조하거나 MS-TDS Product Behavior를 확인하십시오.

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