Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Origen de diccionario ODBC

Puede usar este método para conectarse a cualquier base de datos que tenga un controlador ODBC.

Ejemplo de configuración:

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

Campos de configuración:

Configuración Descripción
db Nombre de la base de datos. Omítalo si el nombre de la base de datos está definido en los parámetros de <connection_string>.
table Nombre de la tabla y del esquema, si existe.
connection_string Cadena de conexión.
invalidate_query Consulta para comprobar el estado del diccionario. Opcional. Lea más en la sección Actualización de los datos del diccionario con LIFETIME.
background_reconnect Se vuelve a conectar a la réplica en segundo plano si falla la conexión. Opcional.
query Consulta personalizada. Opcional.

ClickHouse recibe los caracteres de comillas del controlador ODBC y pone entre comillas todos los ajustes en las consultas al controlador, por lo que es necesario definir el nombre de la tabla respetando el uso de mayúsculas y minúsculas en la base de datos.

Si tiene problemas de codificación al usar Oracle, consulte la entrada correspondiente de FAQ.

Vulnerabilidad conocida de la funcionalidad de los diccionarios ODBC

Ejemplo de uso no seguro

Configuremos unixODBC para PostgreSQL. Contenido de /etc/odbc.ini:

[gregtest]
Driver = /usr/lib/psqlodbca.so
Servername = localhost
PORT = 5432
DATABASE = test_db
#OPTION = 3
USERNAME = test
PASSWORD = test

Si luego haces una consulta como

SELECT * FROM odbc('DSN=gregtest;Servername=some-server.com', 'test_db');

El controlador ODBC enviará los valores de USERNAME y PASSWORD del archivo odbc.ini a some-server.com.

Ejemplo de conexión a PostgreSQL

Sistema operativo Ubuntu.

Instalación de unixODBC y del controlador ODBC para PostgreSQL:

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

Configuración de /etc/odbc.ini (o de ~/.odbc.ini si inició sesión con un usuario que ejecuta 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        =

La configuración del diccionario en 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)

Puede que tenga que editar odbc.ini para especificar la ruta completa a la biblioteca con el controlador DRIVER=/usr/local/lib/psqlodbcw.so.

Ejemplo de conexión a MS SQL Server

Sistema operativo Ubuntu.

Instalación del controlador ODBC para conectarse a MS SQL:

$ sudo apt-get install tdsodbc freetds-bin sqsh

Configuración del controlador:

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

Observaciones:

  • para determinar la versión más antigua de TDS compatible con una versión específica de SQL Server, consulta la documentación del producto o revisa MS-TDS Product Behavior

Configuración del Diccionario en 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