Descrição
RowBinaryWithNamesAndTypes, mas com um byte extra antes de cada célula que indica se o valor DEFAULT da coluna deve ser usado — exatamente como no formato RowBinaryWithDefaults. Essa combinação oferece suporte a INSERTs com evolução de esquema: quem grava pode omitir colunas do cabeçalho (elas recebem o DEFAULT da coluna de destino) e, para qualquer coluna que enviar, pode marcar células individuais como “usar o DEFAULT da coluna” sem confundir isso com NULL.
Este formato é apenas de entrada.
Formato de transmissão
RowBinaryWithNamesAndTypes:
- Um
VarUIntcom o número de colunasN. NStrings prefixadas pelo comprimento com os nomes das colunas.Ntipos de coluna — nomes textuais ou codificação binária compacta, controlados pelas configuraçõesoutput_format_binary_encode_types_in_binary_format/input_format_binary_decode_types_in_binary_format.
N células. Para cada célula:
- Um único byte marcador
UInt8.0x01— usa a expressãoDEFAULTda coluna de destino. Nenhum byte de valor vem em seguida.0x00— um valor vem em seguida, serializado pelo serializadorRowBinarydo tipo da coluna. ParaNullable(T), os bytes do valor começam com o byte nulo deNullable(0para não nulo,1para NULL) e, em seguida, vêm o valor interno, se não for nulo.
Valores padrão vs NULL
Nullable são independentes. Uma coluna Nullable(UInt32) DEFAULT 42 pode ser enviada de três formas diferentes por linha:
Evolução do esquema
Exemplo de uso
Query
Response
- O cabeçalho contém uma coluna chamada
xdo tipoNullable(UInt32). - A única célula usa o marcador
0x01, que significa “usarDEFAULT 42”.
Configurações de formato
RowBinary.