| Entrada | Salida | Alias |
|---|---|---|
| ✔ | ✗ |
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:
| 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. |
Evolución del esquema
| 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). |
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.
| Configuración | Descripción | Predeterminado |
|---|---|---|
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 | Permite 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_format | Permite 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_string | Permite 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_string | Permite leer valores del tipo de dato JSON como valores JSON de tipo String en el formato de entrada RowBinary. | false |