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

> Documentation sur CapnProto

# CapnProto

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>;
};

| Entrée | Sortie | Alias |
| ------ | ------ | ----- |
| ✔      | ✔      |       |

<div id="description">
  ## Description
</div>

Le format `CapnProto` est un format de messages binaires semblable au format [`Protocol Buffers`](https://developers.google.com/protocol-buffers/) et à [Thrift](https://en.wikipedia.org/wiki/Apache_Thrift), mais contrairement à [JSON](/fr/reference/formats/JSON/JSON) ou à [MessagePack](https://msgpack.org/).
Les messages CapnProto sont strictement typés et ne sont pas auto-descriptifs, ce qui signifie qu'ils nécessitent une description de schéma externe. Le schéma est appliqué à la volée et mis en cache pour chaque requête.

Voir aussi [Schéma de format](/fr/reference/formats/index#formatschema).

<div id="data_types-matching-capnproto">
  ## Correspondance des types de données
</div>

Le tableau ci-dessous présente les types de données pris en charge et leur correspondance avec les [types de données](/fr/reference/data-types/index) ClickHouse dans les requêtes `INSERT` et `SELECT`.

| Type de données CapnProto (`INSERT`)                 | Type de données ClickHouse                                                                                                                 | Type de données CapnProto (`SELECT`)                 |
| ---------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------- |
| `UINT8`, `BOOL`                                      | [UInt8](/fr/reference/data-types/int-uint)                                                                                                 | `UINT8`                                              |
| `INT8`                                               | [Int8](/fr/reference/data-types/int-uint)                                                                                                  | `INT8`                                               |
| `UINT16`                                             | [UInt16](/fr/reference/data-types/int-uint), [Date](/fr/reference/data-types/date)                                                         | `UINT16`                                             |
| `INT16`                                              | [Int16](/fr/reference/data-types/int-uint)                                                                                                 | `INT16`                                              |
| `UINT32`                                             | [UInt32](/fr/reference/data-types/int-uint), [DateTime](/fr/reference/data-types/datetime)                                                 | `UINT32`                                             |
| `INT32`                                              | [Int32](/fr/reference/data-types/int-uint), [Decimal32](/fr/reference/data-types/decimal)                                                  | `INT32`                                              |
| `UINT64`                                             | [UInt64](/fr/reference/data-types/int-uint)                                                                                                | `UINT64`                                             |
| `INT64`                                              | [Int64](/fr/reference/data-types/int-uint), [DateTime64](/fr/reference/data-types/datetime), [Decimal64](/fr/reference/data-types/decimal) | `INT64`                                              |
| `FLOAT32`                                            | [Float32](/fr/reference/data-types/float)                                                                                                  | `FLOAT32`                                            |
| `FLOAT64`                                            | [Float64](/fr/reference/data-types/float)                                                                                                  | `FLOAT64`                                            |
| `TEXT, DATA`                                         | [String](/fr/reference/data-types/string), [FixedString](/fr/reference/data-types/fixedstring)                                             | `TEXT, DATA`                                         |
| `union(T, Void), union(Void, T)`                     | [Nullable(T)](/fr/reference/data-types/date)                                                                                               | `union(T, Void), union(Void, T)`                     |
| `ENUM`                                               | [Enum(8/16)](/fr/reference/data-types/enum)                                                                                                | `ENUM`                                               |
| `LIST`                                               | [Array](/fr/reference/data-types/array)                                                                                                    | `LIST`                                               |
| `STRUCT`                                             | [Tuple](/fr/reference/data-types/tuple)                                                                                                    | `STRUCT`                                             |
| `UINT32`                                             | [IPv4](/fr/reference/data-types/ipv4)                                                                                                      | `UINT32`                                             |
| `DATA`                                               | [IPv6](/fr/reference/data-types/ipv6)                                                                                                      | `DATA`                                               |
| `DATA`                                               | [Int128/UInt128/Int256/UInt256](/fr/reference/data-types/int-uint)                                                                         | `DATA`                                               |
| `DATA`                                               | [Decimal128/Decimal256](/fr/reference/data-types/decimal)                                                                                  | `DATA`                                               |
| `STRUCT(entries LIST(STRUCT(key Key, value Value)))` | [Map](/fr/reference/data-types/map)                                                                                                        | `STRUCT(entries LIST(STRUCT(key Key, value Value)))` |

* Les types entiers peuvent être convertis les uns dans les autres lors des opérations d'entrée/sortie.
* Pour utiliser `Enum` au format CapnProto, utilisez le paramètre [format\_capn\_proto\_enum\_comparising\_mode](/fr/reference/settings/formats#format_capn_proto_enum_comparising_mode).
* Les `Array` peuvent être imbriqués et accepter une valeur de type `Nullable` comme argument. Les types `Tuple` et `Map` peuvent également être imbriqués.

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

<div id="inserting-and-selecting-data-capnproto">
  ### Insertion et sélection de données
</div>

Vous pouvez insérer des données CapnProto à partir d’un fichier dans une table ClickHouse à l’aide de la commande suivante :

```bash theme={null}
$ cat capnproto_messages.bin | clickhouse-client --query "INSERT INTO test.hits SETTINGS format_schema = 'schema:Message' FORMAT CapnProto"
```

où le `schema.capnp` se présente ainsi :

```capnp theme={null}
struct Message {
  SearchPhrase @0 :Text;
  c @1 :Uint64;
}
```

Vous pouvez sélectionner des données d’une table ClickHouse et les enregistrer dans un fichier au format `CapnProto` à l’aide de la commande suivante :

```bash theme={null}
$ clickhouse-client --query = "SELECT * FROM test.hits FORMAT CapnProto SETTINGS format_schema = 'schema:Message'"
```

<div id="using-autogenerated-capn-proto-schema">
  ### Utilisation d’un schéma généré automatiquement
</div>

Si vous ne disposez pas d’un schéma `CapnProto` externe pour vos données, vous pouvez tout de même lire/écrire des données au format `CapnProto` à l’aide d’un schéma généré automatiquement.

Par exemple :

```sql theme={null}
SELECT * FROM test.hits 
FORMAT CapnProto 
SETTINGS format_capn_proto_use_autogenerated_schema=1
```

Dans ce cas, ClickHouse générera automatiquement un schéma CapnProto à partir de la structure de la table à l’aide de la fonction [structureToCapnProtoSchema](/fr/reference/functions/regular-functions/other-functions#structureToCapnProtoSchema) et utilisera ce schéma pour sérialiser les données au format CapnProto.

Vous pouvez également lire un fichier CapnProto avec un schéma généré automatiquement (dans ce cas, le fichier doit être créé à l’aide du même schéma) :

```bash theme={null}
$ cat hits.bin | clickhouse-client --query "INSERT INTO test.hits SETTINGS format_capn_proto_use_autogenerated_schema=1 FORMAT CapnProto"
```

<div id="format-settings">
  ## Paramètres de format
</div>

Le paramètre [`format_capn_proto_use_autogenerated_schema`](/fr/reference/settings/formats#format_capn_proto_use_autogenerated_schema) est activé par défaut et s'applique si [`format_schema`](/fr/reference/formats/index#formatschema) n'est pas défini.

Vous pouvez également enregistrer le schéma généré automatiquement dans un fichier lors des opérations d'entrée/sortie à l'aide du paramètre [`output_format_schema`](/fr/reference/settings/formats#output_format_schema).

Par exemple :

```sql theme={null}
SELECT * FROM test.hits 
FORMAT CapnProto 
SETTINGS 
    format_capn_proto_use_autogenerated_schema=1,
    output_format_schema='path/to/schema/schema.capnp'
```

Dans ce cas, le schéma `CapnProto` généré automatiquement sera enregistré dans le fichier `path/to/schema/schema.capnp`.
