Saltar al contenido principal

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:

Evolución del esquema

Ejemplo de uso

Query
Response
  • 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.
Última modificación el 10 de junio de 2026