Saltar al contenido principal
EntradaSalidaAlias

Descripción

Es similar al formato 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. 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.

Formato de transmisión

El encabezado es idéntico a 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.

Valores por defecto vs NULL

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:
BytesSignificado
01Usar DEFAULT 42.
00 01Ruta de valor y luego NULL mediante el tipo Nullable.
00 00 …Ruta de valor y luego un valor interno no nulo.

Evolución del esquema

CasoComportamiento
Columna ausente por completo del encabezado del archivoSe rellena en el destino mediante insertDefaultsForNotSeenColumns; condicionado por defaults_for_omitted_fields.
Columna presente en el encabezado, marcador de celda 0x01insertDefault por fila.
Columna presente en el encabezado, marcador de celda 0x00El valor se analiza normalmente.
Columna adicional en el encabezado, no presente en la tabla de destinoSe 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).

Ejemplo de uso

Query
SELECT * FROM format(
    'RowBinaryWithNamesAndTypesAndDefaults',
    'x Nullable(UInt32) DEFAULT 42',
    unhex('01' || '0178' || '10' || hex('Nullable(UInt32)') || '01')
);
Response
┌──x─┐
│ 42 │
└────┘
  • El encabezado contiene una columna llamada x de tipo Nullable(UInt32).
  • La celda usa el marcador 0x01, que significa “usar DEFAULT 42”.

Ajustes de formato

Los siguientes ajustes son comunes a todos los formatos de tipo RowBinary.
ConfiguraciónDescripciónPredeterminado
format_binary_max_string_sizeEl tamaño máximo permitido para String en el formato RowBinary.1GiB
output_format_binary_encode_types_in_binary_formatPermite escribir tipos en la cabecera usando binary encoding en lugar de cadenas con nombres de tipos en el formato de salida RowBinaryWithNamesAndTypes.false
input_format_binary_decode_types_in_binary_formatPermite leer tipos en la cabecera usando binary encoding en lugar de cadenas con nombres de tipos en el formato de entrada RowBinaryWithNamesAndTypes.false
output_format_binary_write_json_as_stringPermite escribir valores del tipo de dato JSON como valores JSON de tipo String en el formato de salida RowBinary.false
input_format_binary_read_json_as_stringPermite leer valores del tipo de dato JSON como valores JSON de tipo String en el formato de entrada RowBinary.false
Última modificación el 10 de junio de 2026