Descripción
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
RowBinaryWithNamesAndTypes:
- Un
VarUIntcon el número de columnasN. NStringcon prefijo de longitud que contienen los nombres de las columnas.Ntipos de columna: nombres textuales o codificación binaria compacta, según la configuración deoutput_format_binary_encode_types_in_binary_format/input_format_binary_decode_types_in_binary_format.
N celdas. Para cada celda:
- Un único byte marcador
UInt8.0x01— usa la expresiónDEFAULTde la columna de destino. No le siguen bytes de valor.0x00— a continuación viene un valor, serializado mediante el serializadorRowBinarydel tipo de la columna. ParaNullable(T), los bytes del valor comienzan con el byte nulo deNullable(0para no nulo,1para NULL) y, si no es nulo, luego el valor interno.
Valores por defecto vs NULL
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
xde tipoNullable(UInt32). - La celda usa el marcador
0x01, que significa “usarDEFAULT 42”.
Ajustes de formato
RowBinary.