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

> Descripción general de las estructuras de datos anidadas en ClickHouse

# Nested

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

Una estructura de datos anidada es como una tabla dentro de una celda. Los parámetros de una estructura de datos anidada —los nombres y tipos de las columnas— se especifican igual que en una consulta [CREATE TABLE](/es/reference/statements/create/table). Cada fila de la tabla puede corresponder a cualquier cantidad de filas en una estructura de datos anidada.

<Tip>
  **Evite usar puntos en los nombres de las columnas**

  Los nombres de columna que contienen puntos, las columnas que comparten un prefijo común separado por punto y las columnas con el tipo `Array` pueden interpretarse como parte de una estructura Nested aplanada cuando `flatten_nested = 1` (valor predeterminado). Esto puede provocar una validación inesperada de la longitud de los arrays en las operaciones de inserción y restricciones al cambiar el nombre.

  Evite usar puntos en los nombres de las columnas siempre que sea posible.
  Use guiones bajos (`_`) u otro separador en lugar de puntos en los nombres de las columnas, a menos que necesite intencionadamente la semántica de `Nested`.
</Tip>

Ejemplo:

```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 ejemplo declara la estructura de datos anidada `Goals`, que contiene datos sobre conversiones (objetivos alcanzados). Cada fila de la tabla 'visits' puede corresponder a cero o más conversiones.

Cuando [flatten\_nested](/es/reference/settings/session-settings#flatten_nested) se establece en `0` (que no es el valor predeterminado), se admiten niveles arbitrarios de anidamiento.

En la mayoría de los casos, cuando se trabaja con una estructura de datos anidada, sus columnas se especifican mediante nombres de columna separados por un punto. Estas columnas forman un array de tipos coincidentes. Todos los arrays de columnas de una misma estructura de datos anidada tienen la misma longitud.

Ejemplo:

```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'] │
└────────────────────────────────┴───────────────────────────────────────────────────────────────────────────────────────────┘
```

La forma más sencilla de entender una estructura de datos anidada es verla como un conjunto de varios arrays de columnas de la misma longitud.

El único lugar en el que una consulta SELECT puede especificar el nombre de una estructura de datos anidada completa en lugar de columnas individuales es la cláusula ARRAY JOIN. Para obtener más información, consulte "cláusula ARRAY JOIN". Ejemplo:

```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 │
└─────────┴─────────────────────┘
```

No se puede realizar un SELECT sobre una estructura de datos anidada completa. Solo se pueden enumerar explícitamente las columnas individuales que la componen.

Para una consulta INSERT, debe pasar por separado todos los arrays de columnas de una estructura de datos anidada (como si fueran arrays de columnas individuales). Durante la inserción, el sistema comprueba que tengan la misma longitud.

Para una consulta DESCRIBE, las columnas de una estructura de datos anidada se enumeran por separado de la misma manera.

La consulta ALTER para los elementos de una estructura de datos anidada tiene limitaciones.
