> ## 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.

> Documentação do 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 | Saída | Alias |
| ------- | ----- | ----- |
| ✔       | ✔     |       |

<div id="description">
  ## Descrição
</div>

O formato `CapnProto` é um formato de mensagem binária semelhante ao [`Protocol Buffers`](https://developers.google.com/protocol-buffers/) e ao [Thrift](https://en.wikipedia.org/wiki/Apache_Thrift), mas diferente de [JSON](/pt-BR/reference/formats/JSON/JSON) ou [MessagePack](https://msgpack.org/).
As mensagens CapnProto são estritamente tipadas e não são autodescritivas, o que significa que precisam de uma descrição externa do esquema. O esquema é aplicado dinamicamente e armazenado em cache para cada consulta.

Veja também [Esquema de formato](/pt-BR/reference/formats#formatschema).

<div id="data_types-matching-capnproto">
  ## Correspondência entre tipos de dados
</div>

A tabela abaixo mostra os tipos de dados suportados e como eles correspondem aos [tipos de dados](/pt-BR/reference/data-types) do ClickHouse em consultas `INSERT` e `SELECT`.

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

* Tipos inteiros podem ser convertidos entre si na entrada/saída.
* Para trabalhar com `Enum` no formato CapnProto, use o setting [format\_capn\_proto\_enum\_comparising\_mode](/pt-BR/reference/settings/formats#format_capn_proto_enum_comparising_mode).
* Arrays podem ser aninhados e podem ter um argumento do tipo `Nullable`. Os tipos `Tuple` e `Map` também podem ser aninhados.

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

<div id="inserting-and-selecting-data-capnproto">
  ### Inserindo e selecionando dados
</div>

Você pode inserir dados CapnProto de um arquivo em uma tabela do ClickHouse usando o comando a seguir:

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

Em que `schema.capnp` é assim:

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

Você pode selecionar dados de uma tabela do ClickHouse e salvá-los em um arquivo no formato `CapnProto` usando o comando a seguir:

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

<div id="using-autogenerated-capn-proto-schema">
  ### Usando esquema gerado automaticamente
</div>

Se você não tiver um `esquema` externo `CapnProto` para seus dados, ainda poderá exportar/importar dados no formato `CapnProto` usando um esquema gerado automaticamente.

Por exemplo:

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

Nesse caso, o ClickHouse gerará automaticamente o esquema CapnProto com base na estrutura da tabela usando a função [structureToCapnProtoSchema](/pt-BR/reference/functions/regular-functions/other-functions#structureToCapnProtoSchema) e usará esse esquema para serializar os dados no formato CapnProto.

Você também pode ler um arquivo CapnProto com esquema gerado automaticamente (nesse caso, o arquivo deve ser criado usando o mesmo 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">
  ## Configurações de formato
</div>

A configuração [`format_capn_proto_use_autogenerated_schema`](/pt-BR/reference/settings/formats#format_capn_proto_use_autogenerated_schema) vem habilitada por padrão e se aplica quando [`format_schema`](/pt-BR/reference/formats#formatschema) não está definida.

Você também pode salvar o esquema gerado automaticamente em um arquivo durante a entrada/saída usando a configuração [`output_format_schema`](/pt-BR/reference/settings/formats#output_format_schema).

Por exemplo:

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

Nesse caso, o esquema `CapnProto` gerado automaticamente será salvo no arquivo `path/to/schema/schema.capnp`.
