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

> Documentación sobre el formato RowBinaryWithNamesAndTypesAndDefaults

# RowBinaryWithNamesAndTypesAndDefaults

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

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

Es similar al formato [`RowBinaryWithNamesAndTypes`](/es/reference/formats/RowBinary/RowBinaryWithNamesAndTypes), pero con un byte adicional antes de cada celda que indica si debe usarse el valor `DEFAULT` de la columna, exactamente igual que en el formato [`RowBinaryWithDefaults`](/es/reference/formats/RowBinary/RowBinaryWithDefaults). Esta combinación admite operaciones `INSERT` con evolución del esquema: el emisor puede omitir columnas del encabezado (reciben el `DEFAULT` de la columna de destino) y, para cualquier columna que sí envíe, puede marcar celdas individuales como "usar el `DEFAULT` de la columna" sin confundirlo con `NULL`.

Este formato es solo de entrada.

<div id="wire-format">
  ## Formato de transmisión
</div>

El encabezado es idéntico a [`RowBinaryWithNamesAndTypes`](/es/reference/formats/RowBinary/RowBinaryWithNamesAndTypes):

1. Un `VarUInt` con el número de columnas `N`.
2. `N` `String` con prefijo de longitud que contienen los nombres de las columnas.
3. `N` tipos de columna: nombres textuales o codificación binaria compacta, según la configuración de `output_format_binary_encode_types_in_binary_format` / `input_format_binary_decode_types_in_binary_format`.

Después del encabezado, cada fila consta de `N` celdas. Para cada celda:

* Un único byte marcador `UInt8`.
  * `0x01` — usa la expresión `DEFAULT` de la columna de destino. No le siguen bytes de valor.
  * `0x00` — a continuación viene un valor, serializado mediante el serializador `RowBinary` del tipo de la columna. Para `Nullable(T)`, los bytes del valor comienzan con el byte nulo de `Nullable` (`0` para no nulo, `1` para NULL) y, si no es nulo, luego el valor interno.

<div id="defaults-vs-null">
  ## Valores por defecto vs NULL
</div>

El marcador de valor por defecto por celda y el byte nulo integrado de `Nullable` son independientes. Una columna `Nullable(UInt32) DEFAULT 42` puede enviarse de tres formas distintas por fila:

| Bytes     | Significado                                               |
| --------- | --------------------------------------------------------- |
| `01`      | Usar `DEFAULT 42`.                                        |
| `00 01`   | Ruta de valor y luego `NULL` mediante el tipo `Nullable`. |
| `00 00 …` | Ruta de valor y luego un valor interno no nulo.           |

<div id="schema-evolution">
  ## Evolución del esquema
</div>

| Caso                                                                   | Comportamiento                                                                                                                                                                                         |
| ---------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Columna ausente por completo del encabezado del archivo                | Se rellena en el destino mediante `insertDefaultsForNotSeenColumns`; condicionado por `defaults_for_omitted_fields`.                                                                                   |
| Columna presente en el encabezado, marcador de celda `0x01`            | `insertDefault` por fila.                                                                                                                                                                              |
| Columna presente en el encabezado, marcador de celda `0x00`            | El valor se analiza normalmente.                                                                                                                                                                       |
| Columna adicional en el encabezado, no presente en la tabla de destino | Se descarta silenciosamente cuando `input_format_skip_unknown_fields = 1` (primero se consume el marcador; si es `0x01`, no se hace nada más; si es `0x00`, el valor tipado se analiza y se descarta). |

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

```sql title="Query" theme={null}
SELECT * FROM format(
    'RowBinaryWithNamesAndTypesAndDefaults',
    'x Nullable(UInt32) DEFAULT 42',
    unhex('01' || '0178' || '10' || hex('Nullable(UInt32)') || '01')
);
```

```response title="Response" theme={null}
┌──x─┐
│ 42 │
└────┘
```

* El encabezado contiene una columna llamada `x` de tipo `Nullable(UInt32)`.
* La celda usa el marcador `0x01`, que significa "usar `DEFAULT 42`".

<div id="format-settings">
  ## Ajustes de formato
</div>

Los siguientes ajustes son comunes a todos los formatos de tipo `RowBinary`.

| Configuración                                                                                                                            | Descripción                                                                                                                                                                                                                                                                        | Predeterminado |
| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------- |
| [`format_binary_max_string_size`](/es/reference/settings/formats#format_binary_max_string_size)                                          | El tamaño máximo permitido para String en el formato RowBinary.                                                                                                                                                                                                                    | `1GiB`         |
| [`output_format_binary_encode_types_in_binary_format`](/es/reference/settings/formats#input_format_binary_decode_types_in_binary_format) | Permite escribir tipos en la cabecera usando [`binary encoding`](/es/reference/data-types/data-types-binary-encoding) en lugar de cadenas con nombres de tipos en el formato de salida [`RowBinaryWithNamesAndTypes`](/es/reference/formats/RowBinary/RowBinaryWithNamesAndTypes). | `false`        |
| [`input_format_binary_decode_types_in_binary_format`](/es/reference/settings/formats#input_format_binary_decode_types_in_binary_format)  | Permite leer tipos en la cabecera usando [`binary encoding`](/es/reference/data-types/data-types-binary-encoding) en lugar de cadenas con nombres de tipos en el formato de entrada [`RowBinaryWithNamesAndTypes`](/es/reference/formats/RowBinary/RowBinaryWithNamesAndTypes).    | `false`        |
| [`output_format_binary_write_json_as_string`](/es/reference/settings/formats#output_format_binary_write_json_as_string)                  | Permite escribir valores del tipo de dato [`JSON`](/es/reference/data-types/newjson) como valores `JSON` de tipo [String](/es/reference/data-types/string) en el formato de salida [`RowBinary`](/es/reference/formats/RowBinary/RowBinary).                                       | `false`        |
| [`input_format_binary_read_json_as_string`](/es/reference/settings/formats#input_format_binary_read_json_as_string)                      | Permite leer valores del tipo de dato [`JSON`](/es/reference/data-types/newjson) como valores `JSON` de tipo [String](/es/reference/data-types/string) en el formato de entrada [`RowBinary`](/es/reference/formats/RowBinary/RowBinary).                                          | `false`        |
