Saltar al contenido principal
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ónDescripción
dbNombre de la base de datos. Omítalo si el nombre de la base de datos está definido en los parámetros de <connection_string>.
tableNombre de la tabla y del esquema, si existe.
connection_stringCadena de conexión.
invalidate_queryConsulta para comprobar el estado del diccionario. Opcional. Lea más en la sección Actualización de los datos del diccionario con LIFETIME.
background_reconnectSe vuelve a conectar a la réplica en segundo plano si falla la conexión. Opcional.
queryConsulta personalizada. Opcional.
Los campos table y query no pueden usarse juntos. Debe declararse uno de los dos: table o query.
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

Al conectarse a la base de datos mediante el parámetro de conexión Servername del controlador ODBC, este puede sustituirse. En ese caso, los valores de USERNAME y PASSWORD de odbc.ini se envían al servidor remoto y pueden verse comprometidos.
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

    # probar conexión TDS
    $ 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 # si inició sesión con un usuario que ejecuta ClickHouse

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

    # (opcional) probar conexión ODBC (para usar isql-tool instale el paquete [unixodbc](https://packages.debian.org/sid/unixodbc))
    $ 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)
Última modificación el 10 de junio de 2026