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

> Vous pouvez ingérer des données dans ClickHouse à l’aide d’Apache Beam

# Intégration entre Apache Beam et ClickHouse

export const ClickHouseSupportedBadge = () => {
  return <div className="ClickHouseSupportedBadge">
            <div className="ClickHouseSupportedIcon">
                <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                    <path d="M1.30762 1.39073C1.30762 1.3103 1.37465 1.22986 1.46849 1.22986H2.64824C2.72868 1.22986 2.80912 1.29689 2.80912 1.39073V14.4886C2.80912 14.5691 2.74209 14.6495 2.64824 14.6495H1.46849C1.38805 14.6495 1.30762 14.5825 1.30762 14.4886V1.39073Z" fill="currentColor" />
                    <path d="M4.2832 1.39073C4.2832 1.3103 4.35023 1.22986 4.44408 1.22986H5.62383C5.70427 1.22986 5.7847 1.29689 5.7847 1.39073V14.4886C5.7847 14.5691 5.71767 14.6495 5.62383 14.6495H4.44408C4.36364 14.6495 4.2832 14.5825 4.2832 14.4886V1.39073Z" fill="currentColor" />
                    <path d="M7.25977 1.39073C7.25977 1.3103 7.3268 1.22986 7.42064 1.22986H8.60039C8.68083 1.22986 8.76127 1.29689 8.76127 1.39073V14.4886C8.76127 14.5691 8.69423 14.6495 8.60039 14.6495H7.42064C7.3402 14.6495 7.25977 14.5825 7.25977 14.4886V1.39073Z" fill="currentColor" />
                    <path d="M10.2354 1.39073C10.2354 1.3103 10.3024 1.22986 10.3962 1.22986H11.576C11.6564 1.22986 11.7369 1.29689 11.7369 1.39073V14.4886C11.7369 14.5691 11.6698 14.6495 11.576 14.6495H10.3962C10.3158 14.6495 10.2354 14.5825 10.2354 14.4886V1.39073Z" fill="currentColor" />
                    <path d="M13.2256 6.6057C13.2256 6.52526 13.2926 6.44482 13.3865 6.44482H14.5662C14.6466 6.44482 14.7271 6.51186 14.7271 6.6057V9.27354C14.7271 9.35398 14.6601 9.43442 14.5662 9.43442H13.3865C13.306 9.43442 13.2256 9.36739 13.2256 9.27354V6.6057Z" fill="currentColor" />
                </svg>
            </div>
            Compatible avec ClickHouse
        </div>;
};

**Apache Beam**  est un modèle de programmation unifié open source qui permet aux développeurs de définir et d’exécuter des pipelines de traitement de données à la fois par lots et en flux continu. La flexibilité d’Apache Beam réside dans sa capacité à prendre en charge un large éventail de scénarios de traitement de données, allant des opérations ETL (Extract, Transform, Load) au traitement complexe d’événements et à l’analyse en temps réel.
Cette intégration s’appuie sur le [connecteur JDBC](https://github.com/ClickHouse/clickhouse-java) officiel de ClickHouse pour la couche d’insertion sous-jacente.

<div id="integration-package">
  ## Paquet d’intégration
</div>

Le paquet d’intégration nécessaire pour intégrer Apache Beam et ClickHouse est maintenu et développé dans [Apache Beam I/O Connectors](https://beam.apache.org/documentation/io/connectors/) — un bundle d’intégrations pour de nombreux systèmes de stockage de données et bases de données populaires.
L’implémentation `org.apache.beam.sdk.io.clickhouse.ClickHouseIO` se trouve dans le [dépôt Apache Beam](https://github.com/apache/beam/tree/0bf43078130d7a258a0f1638a921d6d5287ca01e/sdks/java/io/clickhouse/src/main/java/org/apache/beam/sdk/io/clickhouse).

<div id="setup-of-the-apache-beam-clickhouse-package">
  ## Mise en place du paquet Apache Beam ClickHouse
</div>

<div id="package-installation">
  ### Installation du paquet
</div>

Ajoutez la dépendance suivante à votre outil de gestion de paquets :

```xml theme={null}
<dependency>
    <groupId>org.apache.beam</groupId>
    <artifactId>beam-sdks-java-io-clickhouse</artifactId>
    <version>${beam.version}</version>
</dependency>
```

<Warning>
  **Version recommandée de Beam**

  Il est recommandé d’utiliser le connecteur `ClickHouseIO` à partir de la version `2.59.0` d’Apache Beam.
  Les versions antérieures peuvent ne pas prendre entièrement en charge les fonctionnalités du connecteur.
</Warning>

Les artifacts sont disponibles dans le [dépôt Maven officiel](https://mvnrepository.com/artifact/org.apache.beam/beam-sdks-java-io-clickhouse).

<div id="code-example">
  ### Exemple de code
</div>

L'exemple suivant lit un fichier CSV nommé `input.csv` sous forme de `PCollection`, le convertit en objet `Row` (à l'aide du schéma défini) et l'insère dans une instance ClickHouse locale à l'aide de `ClickHouseIO` :

```java theme={null}

package org.example;

import org.apache.beam.sdk.Pipeline;
import org.apache.beam.sdk.io.TextIO;
import org.apache.beam.sdk.io.clickhouse.ClickHouseIO;
import org.apache.beam.sdk.schemas.Schema;
import org.apache.beam.sdk.transforms.DoFn;
import org.apache.beam.sdk.transforms.ParDo;
import org.apache.beam.sdk.values.PCollection;
import org.apache.beam.sdk.values.Row;
import org.joda.time.DateTime;

public class Main {

    public static void main(String[] args) {
        // Create a Pipeline object.
        Pipeline p = Pipeline.create();

        Schema SCHEMA =
                Schema.builder()
                        .addField(Schema.Field.of("name", Schema.FieldType.STRING).withNullable(true))
                        .addField(Schema.Field.of("age", Schema.FieldType.INT16).withNullable(true))
                        .addField(Schema.Field.of("insertion_time", Schema.FieldType.DATETIME).withNullable(false))
                        .build();

        // Apply transforms to the pipeline.
        PCollection<String> lines = p.apply("ReadLines", TextIO.read().from("src/main/resources/input.csv"));

        PCollection<Row> rows = lines.apply("ConvertToRow", ParDo.of(new DoFn<String, Row>() {
            @ProcessElement
            public void processElement(@Element String line, OutputReceiver<Row> out) {

                String[] values = line.split(",");
                Row row = Row.withSchema(SCHEMA)
                        .addValues(values[0], Short.parseShort(values[1]), DateTime.now())
                        .build();
                out.output(row);
            }
        })).setRowSchema(SCHEMA);

        rows.apply("Write to ClickHouse",
                        ClickHouseIO.write("jdbc:clickhouse://localhost:8123/default?user=default&password=******", "test_table"));

        // Run the pipeline.
        p.run().waitUntilFinish();
    }
}

```

<div id="supported-data-types">
  ## Types de données pris en charge
</div>

| ClickHouse                         | Apache Beam                | Pris en charge | Remarques                                                                                                                                                 |
| ---------------------------------- | -------------------------- | -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `TableSchema.TypeName.FLOAT32`     | `Schema.TypeName#FLOAT`    | ✅              |                                                                                                                                                           |
| `TableSchema.TypeName.FLOAT64`     | `Schema.TypeName#DOUBLE`   | ✅              |                                                                                                                                                           |
| `TableSchema.TypeName.INT8`        | `Schema.TypeName#BYTE`     | ✅              |                                                                                                                                                           |
| `TableSchema.TypeName.INT16`       | `Schema.TypeName#INT16`    | ✅              |                                                                                                                                                           |
| `TableSchema.TypeName.INT32`       | `Schema.TypeName#INT32`    | ✅              |                                                                                                                                                           |
| `TableSchema.TypeName.INT64`       | `Schema.TypeName#INT64`    | ✅              |                                                                                                                                                           |
| `TableSchema.TypeName.STRING`      | `Schema.TypeName#STRING`   | ✅              |                                                                                                                                                           |
| `TableSchema.TypeName.UINT8`       | `Schema.TypeName#INT16`    | ✅              |                                                                                                                                                           |
| `TableSchema.TypeName.UINT16`      | `Schema.TypeName#INT32`    | ✅              |                                                                                                                                                           |
| `TableSchema.TypeName.UINT32`      | `Schema.TypeName#INT64`    | ✅              |                                                                                                                                                           |
| `TableSchema.TypeName.UINT64`      | `Schema.TypeName#INT64`    | ✅              |                                                                                                                                                           |
| `TableSchema.TypeName.DATE`        | `Schema.TypeName#DATETIME` | ✅              |                                                                                                                                                           |
| `TableSchema.TypeName.DATETIME`    | `Schema.TypeName#DATETIME` | ✅              |                                                                                                                                                           |
| `TableSchema.TypeName.ARRAY`       | `Schema.TypeName#ARRAY`    | ✅              |                                                                                                                                                           |
| `TableSchema.TypeName.ENUM8`       | `Schema.TypeName#STRING`   | ✅              |                                                                                                                                                           |
| `TableSchema.TypeName.ENUM16`      | `Schema.TypeName#STRING`   | ✅              |                                                                                                                                                           |
| `TableSchema.TypeName.BOOL`        | `Schema.TypeName#BOOLEAN`  | ✅              |                                                                                                                                                           |
| `TableSchema.TypeName.TUPLE`       | `Schema.TypeName#ROW`      | ✅              |                                                                                                                                                           |
| `TableSchema.TypeName.FIXEDSTRING` | `FixedBytes`               | ✅              | `FixedBytes` est un `LogicalType` qui représente un tableau d’octets <br /> de longueur fixe situé dans <br /> `org.apache.beam.sdk.schemas.logicaltypes` |
|                                    | `Schema.TypeName#DECIMAL`  | ❌              |                                                                                                                                                           |
|                                    | `Schema.TypeName#MAP`      | ❌              |                                                                                                                                                           |

<div id="clickhouseiowrite-parameters">
  ## Paramètres de ClickHouseIO.Write
</div>

Vous pouvez ajuster la configuration de `ClickHouseIO.Write` à l’aide des fonctions setter suivantes :

| Fonction setter de paramètre | Type d’argument             | Valeur par défaut             | Description                                                                    |
| ---------------------------- | --------------------------- | ----------------------------- | ------------------------------------------------------------------------------ |
| `withMaxInsertBlockSize`     | `(long maxInsertBlockSize)` | `1000000`                     | Taille maximale d’un bloc de lignes à insérer.                                 |
| `withMaxRetries`             | `(int maxRetries)`          | `5`                           | Nombre maximal de tentatives pour les insertions ayant échoué.                 |
| `withMaxCumulativeBackoff`   | `(Duration maxBackoff)`     | `Duration.standardDays(1000)` | Durée cumulée maximale de backoff pour les tentatives.                         |
| `withInitialBackoff`         | `(Duration initialBackoff)` | `Duration.standardSeconds(5)` | Durée du backoff initial avant la première tentative.                          |
| `withInsertDistributedSync`  | `(Boolean sync)`            | `true`                        | Si `true`, synchronise les opérations d’insertion pour les tables distribuées. |
| `withInsertQuorum`           | `(Long quorum)`             | `null`                        | Nombre de répliques requis pour confirmer une opération d’insertion.           |
| `withInsertDeduplicate`      | `(Boolean deduplicate)`     | `true`                        | Si `true`, active la déduplication pour les opérations d’insertion.            |
| `withTableSchema`            | `(TableSchema schema)`      | `null`                        | Schéma de la table ClickHouse cible.                                           |

<div id="limitations">
  ## Limites
</div>

Veuillez tenir compte des limitations suivantes lors de l'utilisation du connecteur :

* À ce jour, seule l'opération Sink est prise en charge. Le connecteur ne prend pas en charge l'opération Source.
* ClickHouse effectue une déduplication lors de l'insertion dans une table `ReplicatedMergeTree` ou dans une table `Distributed` basée sur une table `ReplicatedMergeTree`. Sans réplication, l'insertion dans une table MergeTree standard peut entraîner des doublons si une insertion échoue puis aboutit lors d'une nouvelle tentative. Cependant, chaque bloc est inséré de manière atomique, et la taille du bloc peut être configurée à l'aide de `ClickHouseIO.Write.withMaxInsertBlockSize(long)`. La déduplication s'appuie sur les sommes de contrôle des blocs insérés. Pour plus d'informations sur la déduplication, veuillez consulter [Déduplication](/fr/concepts/features/operations/insert/deduplication) et [Configuration de la déduplication à l'insertion](/fr/reference/settings/session-settings#insert_deduplicate).
* Le connecteur n'exécute aucune instruction DDL ; par conséquent, la table cible doit exister avant toute insertion.

<div id="related-content">
  ## Contenu associé
</div>

* [Documentation](https://beam.apache.org/releases/javadoc/current/org/apache/beam/sdk/io/clickhouse/ClickHouseIO.html) de la classe `ClickHouseIO`.
* Dépôt `GitHub` d'exemples [clickhouse-beam-connector](https://github.com/ClickHouse/clickhouse-beam-connector).
