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

# Téléverser des fichiers dans Cloud

> Apprenez à téléverser des fichiers dans Cloud

Cette page explique comment téléverser un fichier local (par exemple un CSV) dans une table d'un service ClickHouse Cloud depuis la ligne de commande avec la [ClickHouse CLI](/fr/products/cloud/features/cli) (`clickhousectl`). Le déroulement reprend celui de l'assistant de téléversement de fichiers de la console : inspecter le schéma du fichier, créer la table de destination, puis insérer le fichier via HTTP avec la Query API — sans avoir besoin du binaire `clickhouse` ni du password du service.

<h2 id="cli-prerequisites">
  Prérequis
</h2>

Installez la CLI ClickHouse :

```bash theme={null}
curl https://clickhouse.com/cli | sh
```

Vous avez également besoin de `jq`.

Les opérations d'écriture nécessitent une [authentification par API key](/fr/products/cloud/features/admin-features/api/openapi) ; la connexion OAuth est en lecture seule :

```bash theme={null}
clickhousectl cloud auth login --api-key <YOUR_KEY> --api-secret <YOUR_SECRET>
```

Vérifiez avec `clickhousectl cloud auth status` ; une entrée avec le scope `read/write` doit apparaître.

<h2 id="pick-a-service">
  Choisir un service
</h2>

Ce guide suppose que vous disposez déjà d'un service en cours d'exécution. Si ce n'est pas le cas, consultez le [Quick Start Cloud](/fr/get-started/setup/cloud) pour en créer un depuis la CLI. Récupérez l'ID de votre service à partir de son nom :

```bash theme={null}
CH_ID=$(clickhousectl cloud service list --json \
  | jq -r '.[] | select(.name=="my-service") | .id')
```

<h2 id="prepare-the-file">
  Préparer le fichier
</h2>

Supposons que le texte suivant se trouve dans un fichier CSV nommé `data.csv`. La première ligne étant une ligne d'en-tête, le format d'entrée correspondant est `CSVWithNames` :

```text title="data.csv" theme={null}
user_id,url,visited_at,duration_ms
101,https://clickhouse.com/docs,2026-08-14 09:15:32,4210
102,https://clickhouse.com/pricing,2026-08-14 09:16:01,1830
101,https://clickhouse.com/cloud,2026-08-14 09:17:45,2650
103,https://clickhouse.com/blog,2026-08-15 11:02:10,980
102,https://clickhouse.com/docs/cloud,2026-08-15 11:05:44,3120
```

<h2 id="inspect-the-schema">
  Inspecter le schéma
</h2>

Là où l'assistant de la console affiche le type inféré de chaque champ de la source, l'équivalent en CLI consiste à exécuter `DESCRIBE` sur la fonction de table [`format`](/fr/reference/functions/table-functions/format) avec un échantillon du fichier intégré :

```bash theme={null}
clickhousectl cloud service query --id "$CH_ID" --format PrettyCompact \
  --query "DESCRIBE format(CSVWithNames, '$(head -n 3 data.csv)')"
```

Le premier appel `query` provisionne automatiquement un Query API endpoint ainsi qu'une API key limitée au service :

```text theme={null}
Provisioning Query API endpoint + key for service 'my-service'...
   ┌─name────────┬─type───────────────┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┬─ttl_expression─┐
1. │ user_id     │ Nullable(Int64)    │              │                    │         │                  │                │
2. │ url         │ Nullable(String)   │              │                    │         │                  │                │
3. │ visited_at  │ Nullable(DateTime) │              │                    │         │                  │                │
4. │ duration_ms │ Nullable(Int64)    │              │                    │         │                  │                │
   └─────────────┴────────────────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┘
```

L'échantillon est inséré dans un littéral de chaîne SQL : il ne doit donc contenir ni single quotes ni backslashes ; pour les fichiers qui en contiennent, échappez-les ou écrivez tout simplement le `CREATE TABLE` à la main.

<h2 id="create-the-table">
  Créer la table
</h2>

Tout ce que propose l'étape « Configure table » de l'assistant — ajuster les types inférés, la nullabilité, les valeurs par défaut, les champs exclus, le table engine, ainsi que les expressions de sorting, de partitioning et de primary key — revient ici à un simple [`CREATE TABLE`](/fr/reference/statements/create/table). Par exemple, pour affiner les types inférés et choisir une sorting key :

```bash theme={null}
clickhousectl cloud service query --id "$CH_ID" \
  --query "CREATE TABLE default.website_visits (
    user_id UInt32,
    url String,
    visited_at DateTime,
    duration_ms UInt32
  ) ENGINE = MergeTree
  ORDER BY (user_id, visited_at)"
```

La commande affiche `OK`. Si vous préférez charger les données dans une table existante, ignorez cette étape.

<h2 id="upload-the-file">
  Téléverser le fichier
</h2>

`INSERT ... FORMAT` lit les données depuis stdin ; il faut donc rediriger la requête et le fichier ensemble via un pipe :

```bash theme={null}
printf 'INSERT INTO default.website_visits FORMAT CSVWithNames\n' | cat - data.csv \
  | clickhousectl cloud service query --id "$CH_ID"
```

La commande affiche `OK`.

<Warning>
  **Transmettez la requête et les données ensemble**

  Passer l'`INSERT` via `--query` puis rediriger ou piper le fichier vers stdin (`--query "INSERT ..." < data.csv`) ne fonctionne pas : `--query` ne lit jamais stdin, les données ne vont donc nulle part. La CLI refuse d'emblée cette combinaison plutôt que de n'insérer silencieusement aucune donnée — elle se termine avec le code `1`, n'insère aucune row et affiche :

  ```text theme={null}
  Error: --query cannot be combined with SQL or data on stdin. The Query API sends one request body, so redirected data is never read. Pipe the statement and its data together on stdin instead: printf 'INSERT INTO t FORMAT CSV\n' | cat - data.csv | clickhousectl cloud service query --id <id>. Or read a whole statement from stdin with --queries-file -.
  ```

  Envoyez toujours la requête et les données via stdin en un seul flux, comme illustré ci-dessus. Seul un stdin transportant effectivement des données entre en conflit avec `--query` : `--query` seul continue donc de fonctionner dans les scripts et les pipelines où stdin n'est pas un terminal.
</Warning>

Vérifiez que les rows ont bien été insérées :

```bash theme={null}
clickhousectl cloud service query --id "$CH_ID" --json \
  --query "SELECT count() FROM default.website_visits"
```

```text theme={null}
{"count()":5}
```

```bash theme={null}
clickhousectl cloud service query --id "$CH_ID" --format PrettyCompact \
  --query "SELECT * FROM default.website_visits ORDER BY visited_at"
```

```text theme={null}
   ┌─user_id─┬─url───────────────────────────────┬──────────visited_at─┬─duration_ms─┐
1. │     101 │ https://clickhouse.com/docs       │ 2026-08-14 09:15:32 │        4210 │
2. │     102 │ https://clickhouse.com/pricing    │ 2026-08-14 09:16:01 │        1830 │
3. │     101 │ https://clickhouse.com/cloud      │ 2026-08-14 09:17:45 │        2650 │
4. │     103 │ https://clickhouse.com/blog       │ 2026-08-15 11:02:10 │         980 │
5. │     102 │ https://clickhouse.com/docs/cloud │ 2026-08-15 11:05:44 │        3120 │
   └─────────┴───────────────────────────────────┴─────────────────────┴─────────────┘
```

<h2 id="other-file-formats">
  Autres formats de fichier
</h2>

Le même principe s'applique à tout [format d'entrée](/fr/reference/formats/index) pris en charge par ClickHouse — y compris tous les formats acceptés par l'assistant de téléversement de la console, tels que `CSV`, `JSONEachRow` et `TabSeparatedWithNames`. Pour un autre format, veillez à modifier le nom du format de façon cohérente à la fois dans l'étape d'inférence de schéma `DESCRIBE format(...)` et dans l'instruction `INSERT ... FORMAT`, et utilisez un fichier d'exemple correspondant à ce format (un exemple TSV pour `TabSeparatedWithNames`, un exemple JSON-lines pour `JSONEachRow`, etc.). Par exemple, l'étape de téléversement d'un fichier TSV devient :

```bash theme={null}
printf 'INSERT INTO default.website_visits FORMAT TabSeparatedWithNames\n' | cat - data.tsv \
  | clickhousectl cloud service query --id "$CH_ID"
```

<h2 id="cleanup">
  Nettoyage
</h2>

S'il s'agissait d'un simple essai, supprimez la table pour effacer les données importées :

```bash theme={null}
clickhousectl cloud service query --id "$CH_ID" \
  --query "DROP TABLE default.website_visits"
```
