> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> Documentação do formato SQLite

# SQLite

| Entrada | Saída | Alias |
| - | - | - |
| ✔ | ✔ | |

<h2 id="description">
  Descrição
</h2>

O formato `SQLite` lê e grava arquivos de banco de dados SQLite.

Na saída, o ClickHouse grava o resultado da consulta em uma única tabela do banco de dados SQLite. Na entrada, o ClickHouse lê uma única tabela do banco de dados SQLite.

No caso de arquivos regulares locais, o ClickHouse abre o arquivo de banco de dados SQLite diretamente. Para os demais streams de entrada e de saída, o ClickHouse materializa o banco de dados SQLite em memória.

Na entrada, o ClickHouse lê, por padrão, a primeira tabela do banco de dados SQLite. É possível alterar esse comportamento com a configuração `input_format_sqlite_table_name`. Na saída, o nome de tabela padrão é `table`, que pode ser alterado com a configuração `output_format_sqlite_table_name`.

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

```bash theme={null}
clickhouse-client --query="SELECT number, toString(number) AS s FROM numbers(10) FORMAT SQLite" > data.sqlite
clickhouse-local --input-format SQLite --structure "number UInt64, s String" --query "SELECT * FROM table" < data.sqlite
```

<h2 id="data-types-matching">
  Correspondência de tipos de dados
</h2>

Quando o ClickHouse grava dados no formato `SQLite`, ele cria uma tabela SQLite com os seguintes tipos declarados:

| Tipo de dado do ClickHouse | Tipo declarado no SQLite |
| - | - |
| `UInt64`, `Int128`, `UInt128`, `Int256`, `UInt256` | `TEXT` |
| `Bool`, `Int8`, `Int16`, `Int32`, `Int64`, `UInt8`, `UInt16`, `UInt32` | `INTEGER` |
| Tipos de ponto flutuante | `REAL` |
| Outros tipos | `TEXT` |

Em colunas `Float32` e `Float64`, valores diferentes de `NaN` são gravados com as classes de armazenamento nativas do SQLite, enquanto valores `NaN` são gravados com a serialização de texto do ClickHouse. Valores `Bool` e valores inteiros comuns também são gravados com as classes de armazenamento nativas do SQLite. Inteiros largos e tipos complexos são gravados com a serialização de texto do ClickHouse. Valores `NULL` são gravados como `NULL` do SQLite.

Ao inferir um schema a partir de uma entrada SQLite, o ClickHouse usa o mesmo mapeamento do [motor de banco de dados SQLite](/docs/engines/database-engines/sqlite#data_types-support):

| Tipo declarado no SQLite | Tipo inferido pelo ClickHouse |
| - | - |
| Nome do tipo contém `INT` | `Int64` |
| `REAL`, `FLOAT`, `DOUBLE` | `Float64` |
| Outros tipos, incluindo `TEXT` e `BLOB` | `String` |

Por padrão, o ClickHouse encapsula o tipo inferido em `Nullable` se a coluna SQLite correspondente permitir `NULL`; colunas `NOT NULL` continuam não `Nullable`. Você pode alterar esse comportamento com a configuração [`schema_inference_make_columns_nullable`](/docs/pt-BR/reference/settings/formats/schema-inference#schema_inference_make_columns_nullable).

A inferência de esquema não preserva os tipos de dados originais do ClickHouse. Por exemplo, `Bool` é gravado como `INTEGER` do SQLite e inferido como `Int64`, enquanto `Date`, `DateTime`, `Decimal`, `UUID`, `IPv4`, `IPv6`, `Enum`, `Array`, `Tuple` e `Map` são gravados como `TEXT` do SQLite e inferidos como `String`.

Quando a estrutura da tabela do ClickHouse é especificada explicitamente, valores de ponto flutuante são lidos como valores `REAL` do SQLite, com fallback para texto no caso de `NaN`. Os demais valores do SQLite são lidos como texto e convertidos para os tipos do ClickHouse solicitados.

<h2 id="format-settings">
  Configurações de formato
</h2>

| Configuração | Descrição | Padrão |
| - | - | - |
| [`input_format_sqlite_table_name`](/docs/pt-BR/reference/settings/formats/input-format#input_format_sqlite_table_name) | Nome da tabela a ser lida na entrada SQLite. Se vazio, será usada a primeira tabela. | `''` |
| [`output_format_sqlite_table_name`](/docs/pt-BR/reference/settings/formats/output-format#output_format_sqlite_table_name) | Nome da tabela na saída SQLite. | `'table'` |
