> ## Documentation Index
> Fetch the complete documentation index at: https://docs.metronome.com/llms.txt
> Use this file to discover all available pages before exploring further.

# ClickHouse

## Prérequis

* Si votre posture de sécurité ClickHouse nécessite une liste blanche d'adresses IP, ayez à disposition l'IP statique du service de synchronisation des données. Vous en aurez besoin à l'étape 1.

> 🚧 Tunneling SSH non pris en charge
>
> Les destinations ClickHouse ne prennent pas en charge le tunneling SSH. Votre instance ClickHouse doit être accessible via l'Internet public.

## Étape 1 : autoriser l'accès

Créez une règle dans un groupe de sécurité ou les paramètres de pare-feu pour mettre en liste blanche :

* Les connexions entrantes vers votre hôte et port (généralement `9440` pour TLS ou `9000` pour TCP) depuis l'IP statique.
* Les connexions sortantes depuis les ports `1024` à `65535` vers l'IP statique.

> 📘 Mise en liste blanche du réseau
>
> * **Cloud Hosted (US) :** `35.192.85.117/32`
> * **Cloud Hosted (EU) :** `104.199.49.149/32`
>
> Si vous êtes en cloud privé ou auto-hébergé, contactez votre représentant Metronome pour obtenir l'IP de sortie statique.

## Étape 2 : créer un utilisateur en écriture

Créez un utilisateur de base de données pour écrire les données exportées.

1. Ouvrez une connexion à votre base de données ClickHouse.
2. Exécutez la commande SQL suivante pour créer un utilisateur pour le transfert de données :

```sql theme={null}
CREATE USER <username>@'%' IDENTIFIED BY '<some-password>';
```

> 🚧 Règles de mot de passe
>
> Les mots de passe ne peuvent contenir que des caractères alphanumériques (`A-Z`, `a-z`, `0-9`), des tirets (`-`) et des underscores (`_`).

3. Accordez à l'utilisateur les privilèges requis sur la base de données :

```sql theme={null}
GRANT SELECT ON information_schema.columns TO <username>;
GRANT CREATE, INSERT, DROP, ALTER, OPTIMIZE, SHOW, TRUNCATE ON <database>.* TO <username>@'%';
GRANT CREATE TEMPORARY TABLE, S3 ON *.* TO <username>@'%';
```

> 📘 Comprendre les permissions `CREATE TEMPORARY TABLE` et `S3`
>
> Le service de synchronisation des données utilise ces permissions pour transférer efficacement les données vers ClickHouse. Il stocke les données dans un stockage d'objets sous forme de fichiers compressés, les copie dans des tables temporaires avec `COPY INTO` et les fusionne dans les tables cibles. La table temporaire ne persiste pas au-delà de la session.

## Étape 3 : configurer un bucket de staging

Les destinations ClickHouse nécessitent un bucket de staging pour transférer efficacement les données. Configurez votre bucket de staging en utilisant l'une des options suivantes :

* **S3** — Suivez le guide de configuration du [bucket de staging S3](/fr/guides/reporting-insights/data-export/destinations/staging-s3).
* **GCS** — Suivez le guide de configuration du [bucket de staging GCS](/fr/guides/reporting-insights/data-export/destinations/staging-gcs).
* **Implicite** — Utilisez les ressources de staging intégrées de votre cluster ClickHouse (voir ci-dessous).

> 📘 Utiliser l'option bucket implicite
>
> ClickHouse prend en charge la configuration des ressources de staging avec des identifiants d'environnement. Si ce paramètre est activé sur votre cluster ClickHouse, vous pouvez choisir l'option **implicite** lors de la configuration de la destination pour utiliser les ressources de staging configurées du cluster.

> 📘 Optionnel : ajouter une politique de cycle de vie de courte rétention
>
> Si vous utilisez S3 ou GCS pour le staging, vous pouvez configurer une règle de cycle de vie sur le bucket pour supprimer automatiquement les objets de plus de 2 jours. La logique de transfert nettoie les fichiers une fois terminée, cette étape est donc facultative.

## Étape 4 : ajouter votre destination

> 🚧 Protocole de connexion
>
> Utilisez le **protocole natif TCP** de ClickHouse, pas HTTPS. Il est généralement exposé sur le port `9000`.

Utilisez les détails suivants pour finaliser la configuration de la connexion :

* **Host name**
* **Port**
* **Cluster**
* **Database name**
* **Schema name**
* **Username**
* **Password**
* **Staging bucket details**

> 📘 Comprendre les champs database vs. schema
>
> Selon la version de votre intégration, la configuration demande à la fois une database et un schema, ou une connection database et une write database.
>
> * **Database** (également appelée `connection_database`) : la base de données utilisée pour établir la connexion avec ClickHouse.
> * **Schema** (également appelée `write_database`) : la base de données ou le schéma dans lequel le service écrit les données.
>
> Ils peuvent avoir la même valeur, mais ce n'est pas obligatoire.

## Interroger les données ClickHouse

Les tables ClickHouse résultantes utilisent le moteur de table [ReplacingMergeTree](https://clickhouse.com/docs/engines/table-engines/mergetree-family/replacingmergetree) pour effectuer efficacement les upserts. Utilisez le mot-clé `FINAL` lors de la sélection à partir de ces tables pour supprimer les doublons.

```sql theme={null}
SELECT
  *
FROM
  schema.table FINAL
WHERE
  foo = bar
ORDER BY foo
LIMIT 10;
```
