> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-fbfa8bee.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Permet à ClickHouse de se connecter à des bases de données externes via ODBC.

# Moteur de table ODBC

export const CloudNotSupportedBadge = () => {
  return <div className="cloudNotSupportedBadge">
            <div className="cloudNotSupportedIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.5" d="M6.33366 12.6666L12.3739 12.6667C13.6593 12.6667 14.7073 11.6187 14.7073 10.3334C14.7073 9.04804 13.6593 8.00003 12.3739 8.00003C12.3739 8.00003 12.3337 7.66659 12.0003 7.33325M10.667 5.33322C8.00033 2.33325 4.45395 4.78537 4.14195 6.68203C2.55728 6.7627 1.29395 8.06203 1.29395 9.6667C1.29395 11.3234 2.66699 12.6666 4.00033 12.6666" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.5" d="M2.66699 14L12.0003 4.66663" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>

        </div>
            Non pris en charge par ClickHouse Cloud
        </div>;
};

Permet à ClickHouse de se connecter à des bases de données externes via [ODBC](https://en.wikipedia.org/wiki/Open_Database_Connectivity).

Pour mettre en œuvre des connexions ODBC en toute sécurité, ClickHouse utilise un programme distinct, `clickhouse-odbc-bridge`. Si le pilote ODBC est chargé directement depuis `clickhouse-server`, des problèmes de pilote peuvent faire planter le serveur ClickHouse. ClickHouse démarre automatiquement `clickhouse-odbc-bridge` lorsqu'il en a besoin. Le programme `clickhouse-odbc-bridge` est installé à partir du même paquet que `clickhouse-server`.

Ce moteur prend en charge le type de données [Nullable](/fr/reference/data-types/nullable).

<div id="creating-a-table">
  ## Créer une table
</div>

```sql theme={null}
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    name1 [type1],
    name2 [type2],
    ...
)
ENGINE = ODBC(datasource, external_database, external_table)
```

Consultez une description détaillée de la requête [CREATE TABLE](/fr/reference/statements/create/table).

La structure de la table peut différer de celle de la table source :

* Les noms de colonnes doivent être identiques à ceux de la table source, mais vous pouvez n’utiliser qu’une partie de ces colonnes, dans n’importe quel ordre.
* Les types de colonnes peuvent différer de ceux de la table source. ClickHouse tente de [convertir](/fr/reference/functions/regular-functions/type-conversion-functions#CAST) les valeurs vers les types de données ClickHouse.
* Le paramètre [external\_table\_functions\_use\_nulls](/fr/reference/settings/session-settings#external_table_functions_use_nulls) définit la manière de gérer les colonnes Nullable. Valeur par défaut : 1. Si la valeur est 0, la fonction de table ne crée pas de colonnes Nullable et insère des valeurs par défaut à la place des valeurs nulles. Cela s’applique également aux valeurs NULL à l’intérieur des tableaux.

**Paramètres du moteur**

* `datasource` — Nom de la section contenant les paramètres de connexion dans le fichier `odbc.ini`.
* `external_database` — Nom d’une base de données dans un SGBD externe.
* `external_table` — Nom d’une table de `external_database`.

Ces paramètres peuvent également être transmis à l’aide de [collections nommées](/fr/concepts/features/configuration/server-config/named-collections).

<div id="usage-example">
  ## Exemple d'utilisation
</div>

**Récupération de données depuis une installation locale de MySQL via ODBC**

Cet exemple a été testé avec Ubuntu Linux 18.04 et MySQL server 5.7.

Assurez-vous que unixODBC et MySQL Connector sont installés.

Par défaut (s'il est installé à partir de paquets), ClickHouse démarre avec l'utilisateur `clickhouse`. Vous devez donc créer et configurer cet utilisateur sur le MySQL server.

```bash theme={null}
$ sudo mysql
```

```sql theme={null}
mysql> CREATE USER 'clickhouse'@'localhost' IDENTIFIED BY 'clickhouse';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'clickhouse'@'localhost' WITH GRANT OPTION;
```

Configurez ensuite la connexion dans `/etc/odbc.ini`.

```bash theme={null}
$ cat /etc/odbc.ini
[mysqlconn]
DRIVER = /usr/local/lib/libmyodbc5w.so
SERVER = 127.0.0.1
PORT = 3306
DATABASE = test
USER = clickhouse
PASSWORD = clickhouse
```

Vous pouvez vérifier la connexion à l’aide de l’utilitaire `isql` fourni avec unixODBC.

```bash theme={null}
$ isql -v mysqlconn
+-------------------------+
| Connected!                            |
|                                       |
...
```

Table dans MySQL :

```text theme={null}
mysql> CREATE DATABASE test;
Query OK, 1 row affected (0,01 sec)

mysql> CREATE TABLE `test`.`test` (
    ->   `int_id` INT NOT NULL AUTO_INCREMENT,
    ->   `int_nullable` INT NULL DEFAULT NULL,
    ->   `float` FLOAT NOT NULL,
    ->   `float_nullable` FLOAT NULL DEFAULT NULL,
    ->   PRIMARY KEY (`int_id`));
Query OK, 0 rows affected (0,09 sec)

mysql> insert into test.test (`int_id`, `float`) VALUES (1,2);
Query OK, 1 row affected (0,00 sec)

mysql> select * from test.test;
+------+----------+-----+----------+
| int_id | int_nullable | float | float_nullable |
+------+----------+-----+----------+
|      1 |         NULL |     2 |           NULL |
+------+----------+-----+----------+
1 row in set (0,00 sec)
```

Table ClickHouse récupérant des données de la table MySQL :

```sql theme={null}
CREATE TABLE odbc_t
(
    `int_id` Int32,
    `float_nullable` Nullable(Float32)
)
ENGINE = ODBC('DSN=mysqlconn', 'test', 'test')
```

```sql theme={null}
SELECT * FROM odbc_t
```

```text theme={null}
┌─int_id─┬─float_nullable─┐
│      1 │           ᴺᵁᴸᴸ │
└────────┴────────────────┘
```

<div id="see-also">
  ## Voir aussi
</div>

* [Dictionnaires ODBC](/fr/reference/statements/create/dictionary/sources/odbc)
* [Fonction de table ODBC](/fr/reference/functions/table-functions/odbc)
