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

> Documentación de 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>
            Not supported in ClickHouse Cloud
        </div>;
};

| Entrada | Salida | Alias |
| ------- | ------ | ----- |
| ✔       | ✔      |       |

<div id="description">
  ## Descripción
</div>

El formato `CapnProto` es un formato de mensajes binarios similar a [`Protocol Buffers`](https://developers.google.com/protocol-buffers/) y [Thrift](https://en.wikipedia.org/wiki/Apache_Thrift), pero no a [JSON](/es/reference/formats/JSON/JSON) ni a [MessagePack](https://msgpack.org/).
Los mensajes de CapnProto están estrictamente tipados y no son autodescriptivos, lo que significa que requieren una descripción de esquema externa. El esquema se aplica sobre la marcha y se almacena en caché para cada consulta.

Véase también [Esquema de formato](/es/reference/formats#formatschema).

<div id="data_types-matching-capnproto">
  ## Correspondencia entre tipos de datos
</div>

La siguiente tabla muestra los tipos de datos compatibles y su correspondencia con los [tipos de datos](/es/reference/data-types) de ClickHouse en las consultas `INSERT` y `SELECT`.

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

* Los tipos enteros pueden convertirse entre sí durante la entrada y la salida.
* Para trabajar con `Enum` en formato CapnProto, use la opción [format\_capn\_proto\_enum\_comparising\_mode](/es/reference/settings/formats#format_capn_proto_enum_comparising_mode).
* Los `Array` pueden anidarse y pueden tener un valor del tipo `Nullable` como argumento. Los tipos `Tuple` y `Map` también pueden anidarse.

<div id="example-usage">
  ## Ejemplo de uso
</div>

<div id="inserting-and-selecting-data-capnproto">
  ### Insertar y seleccionar datos
</div>

Puede insertar datos de CapnProto desde un archivo en una tabla de ClickHouse con el siguiente comando:

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

Donde `schema.capnp` se ve así:

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

Puede seleccionar datos de una tabla de ClickHouse y guardarlos en un archivo con el formato `CapnProto` mediante el siguiente comando:

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

<div id="using-autogenerated-capn-proto-schema">
  ### Uso de un esquema autogenerado
</div>

Si no dispone de un esquema externo de `CapnProto` para sus datos, aún puede generar o ingerir datos en formato `CapnProto` mediante un esquema autogenerado.

Por ejemplo:

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

En este caso, ClickHouse autogenerará el esquema de CapnProto según la estructura de la tabla mediante la función [structureToCapnProtoSchema](/es/reference/functions/regular-functions/other-functions#structureToCapnProtoSchema) y usará este esquema para serializar datos en formato CapnProto.

También puede leer un archivo CapnProto con un esquema autogenerado (en este caso, el archivo debe haberse creado con el mismo esquema):

```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">
  ## Configuración del formato
</div>

La configuración [`format_capn_proto_use_autogenerated_schema`](/es/reference/settings/formats#format_capn_proto_use_autogenerated_schema) está habilitada de forma predeterminada y se aplica si no se ha establecido [`format_schema`](/es/reference/formats#formatschema).

También puede guardar el esquema autogenerado en un archivo durante la entrada/salida mediante la configuración [`output_format_schema`](/es/reference/settings/formats#output_format_schema).

Por ejemplo:

```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'
```

En este caso, el esquema `CapnProto` autogenerado se guardará en el archivo `path/to/schema/schema.capnp`.
