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

> Visão geral de estruturas de dados aninhadas no ClickHouse

# Nested

<div id="nestedname1-type1-name2-type2-">
  ## Nested(name1 Type1, Name2 Type2, ...)
</div>

Uma estrutura de dados aninhada é como uma tabela dentro de uma célula. Os parâmetros de uma estrutura de dados aninhada — os nomes e tipos das colunas — são especificados da mesma forma que em uma consulta [CREATE TABLE](/pt-BR/reference/statements/create/table). Cada linha da tabela pode corresponder a qualquer quantidade de linhas em uma estrutura de dados aninhada.

<Tip>
  **Evite usar pontos em nomes de colunas**

  Nomes de colunas que contêm pontos, colunas que compartilham o mesmo prefixo com ponto e colunas do tipo `Array` podem ser interpretados como parte de uma estrutura Nested achatada quando `flatten_nested = 1` (o padrão). Isso pode causar validação inesperada do tamanho dos arrays durante inserts e restrições de renomeação.

  Evite usar pontos em nomes de colunas, se possível.
  Use sublinhados (`_`) ou outro separador em vez de pontos nos nomes das colunas, a menos que você realmente precise da semântica de `Nested`.
</Tip>

Exemplo:

```sql theme={null}
CREATE TABLE test.visits
(
    CounterID UInt32,
    StartDate Date,
    Sign Int8,
    IsNew UInt8,
    VisitID UInt64,
    UserID UInt64,
    ...
    Goals Nested
    (
        ID UInt32,
        Serial UInt32,
        EventTime DateTime,
        Price Int64,
        OrderID String,
        CurrencyID UInt32
    ),
    ...
) ENGINE = CollapsingMergeTree(StartDate, intHash32(UserID), (CounterID, StartDate, intHash32(UserID), VisitID), 8192, Sign)
```

Este exemplo declara a estrutura de dados aninhada `Goals`, que contém dados sobre conversões (metas alcançadas). Cada linha da tabela 'visits' pode corresponder a zero ou qualquer quantidade de conversões.

Quando [flatten\_nested](/pt-BR/reference/settings/session-settings#flatten_nested) é configurado como `0` (o que não é o padrão), níveis arbitrários de aninhamento são suportados.

Na maioria dos casos, ao trabalhar com uma estrutura de dados aninhada, suas colunas são especificadas com nomes de colunas separados por um ponto. Essas colunas formam um array de tipos correspondentes. Todos os arrays de colunas de uma mesma estrutura de dados aninhada têm o mesmo comprimento.

Exemplo:

```sql theme={null}
SELECT
    Goals.ID,
    Goals.EventTime
FROM test.visits
WHERE CounterID = 101500 AND length(Goals.ID) < 5
LIMIT 10
```

```text theme={null}
┌─Goals.ID───────────────────────┬─Goals.EventTime───────────────────────────────────────────────────────────────────────────┐
│ [1073752,591325,591325]        │ ['2014-03-17 16:38:10','2014-03-17 16:38:48','2014-03-17 16:42:27']                       │
│ [1073752]                      │ ['2014-03-17 00:28:25']                                                                   │
│ [1073752]                      │ ['2014-03-17 10:46:20']                                                                   │
│ [1073752,591325,591325,591325] │ ['2014-03-17 13:59:20','2014-03-17 22:17:55','2014-03-17 22:18:07','2014-03-17 22:18:51'] │
│ []                             │ []                                                                                        │
│ [1073752,591325,591325]        │ ['2014-03-17 11:37:06','2014-03-17 14:07:47','2014-03-17 14:36:21']                       │
│ []                             │ []                                                                                        │
│ []                             │ []                                                                                        │
│ [591325,1073752]               │ ['2014-03-17 00:46:05','2014-03-17 00:46:05']                                             │
│ [1073752,591325,591325,591325] │ ['2014-03-17 13:28:33','2014-03-17 13:30:26','2014-03-17 18:51:21','2014-03-17 18:51:45'] │
└────────────────────────────────┴───────────────────────────────────────────────────────────────────────────────────────────┘
```

É mais fácil pensar em uma estrutura de dados aninhada como um conjunto de várias colunas do tipo array com o mesmo comprimento.

O único lugar em que uma consulta SELECT pode especificar o nome de uma estrutura de dados aninhada inteira, em vez de colunas individuais, é a cláusula ARRAY JOIN. Para mais informações, consulte "cláusula ARRAY JOIN". Exemplo:

```sql theme={null}
SELECT
    Goal.ID,
    Goal.EventTime
FROM test.visits
ARRAY JOIN Goals AS Goal
WHERE CounterID = 101500 AND length(Goals.ID) < 5
LIMIT 10
```

```text theme={null}
┌─Goal.ID─┬──────Goal.EventTime─┐
│ 1073752 │ 2014-03-17 16:38:10 │
│  591325 │ 2014-03-17 16:38:48 │
│  591325 │ 2014-03-17 16:42:27 │
│ 1073752 │ 2014-03-17 00:28:25 │
│ 1073752 │ 2014-03-17 10:46:20 │
│ 1073752 │ 2014-03-17 13:59:20 │
│  591325 │ 2014-03-17 22:17:55 │
│  591325 │ 2014-03-17 22:18:07 │
│  591325 │ 2014-03-17 22:18:51 │
│ 1073752 │ 2014-03-17 11:37:06 │
└─────────┴─────────────────────┘
```

Você não pode executar `SELECT` para uma estrutura de dados aninhada inteira. Só é possível listar explicitamente as colunas individuais que fazem parte dela.

Para uma consulta `INSERT`, você deve passar separadamente todos os arrays das colunas componentes de uma estrutura de dados aninhada (como se fossem arrays de colunas individuais). Durante a inserção, o sistema verifica se eles têm o mesmo comprimento.

Para uma consulta `DESCRIBE`, as colunas de uma estrutura de dados aninhada são listadas separadamente da mesma forma.

A consulta `ALTER` para elementos de uma estrutura de dados aninhada tem limitações.
