| Entrée | Sortie | Alias |
|---|---|---|
| ✔ | ✗ |
Description
RowBinaryWithNamesAndTypes, mais avec un octet supplémentaire avant chaque cellule indiquant si la valeur DEFAULT de la colonne doit être utilisée — exactement comme dans le format RowBinaryWithDefaults. Cette combinaison prend en charge les INSERT avec évolution du schéma : l’émetteur peut omettre des colonnes de l’en-tête (elles reçoivent alors la valeur DEFAULT de la colonne cible) et, pour chaque colonne qu’il envoie, il peut marquer certaines cellules comme « utiliser la valeur DEFAULT de la colonne » sans confondre cela avec NULL.
Ce format est pris en charge uniquement en entrée.
Format de transmission
RowBinaryWithNamesAndTypes :
- Un
VarUIntindiquant le nombre de colonnesN. NStringprécédées de leur longueur, contenant les noms de colonnes.Ntypes de colonnes — soit des noms textuels, soit un encodage binaire compact, selon les paramètresoutput_format_binary_encode_types_in_binary_format/input_format_binary_decode_types_in_binary_format.
N cellules. Pour chaque cellule :
- Un unique octet marqueur
UInt8.0x01— utilise l’expressionDEFAULTde la colonne cible. Aucun octet de valeur ne suit.0x00— une valeur suit, sérialisée avec le sérialiseurRowBinarydu type de colonne. PourNullable(T), les octets de valeur commencent par l’octet NULL deNullable(0pour non-NULL,1pour NULL), puis par la valeur interne si elle n’est pas NULL.
Valeurs par défaut vs NULL
Nullable sont indépendants. Une colonne Nullable(UInt32) DEFAULT 42 peut être envoyée de trois façons différentes pour chaque ligne :
| Octets | Signification |
|---|---|
01 | Utiliser DEFAULT 42. |
00 01 | Chemin de valeur, puis NULL via le type Nullable. |
00 00 … | Chemin de valeur, puis une valeur interne non nulle. |
Évolution du schéma
| Cas | Comportement |
|---|---|
| Colonne entièrement absente de l’en-tête du fichier | Remplie dans la cible via insertDefaultsForNotSeenColumns ; contrôlée par defaults_for_omitted_fields. |
Colonne présente dans l’en-tête, marqueur de cellule 0x01 | insertDefault pour chaque ligne. |
Colonne présente dans l’en-tête, marqueur de cellule 0x00 | La valeur est parsée normalement. |
| Colonne supplémentaire dans l’en-tête, absente de la table cible | Ignorée silencieusement lorsque input_format_skip_unknown_fields = 1 (le marqueur est d’abord consommé ; si 0x01, rien d’autre ; si 0x00, la valeur typée est parsée puis ignorée). |
Exemple d’utilisation
Query
Response
- L’en-tête comprend une colonne nommée
xde typeNullable(UInt32). - L’unique cellule utilise le marqueur
0x01, ce qui signifie “utiliserDEFAULT 42”.
Paramètres de format
RowBinary.
| Paramètre | Description | Par défaut |
|---|---|---|
format_binary_max_string_size | Taille maximale autorisée pour String dans le format RowBinary. | 1GiB |
output_format_binary_encode_types_in_binary_format | Permet d’écrire les types dans l’en-tête à l’aide d’un encodage binaire au lieu de chaînes contenant les noms de type dans le format de sortie RowBinaryWithNamesAndTypes. | false |
input_format_binary_decode_types_in_binary_format | Permet de lire les types dans l’en-tête à l’aide d’un encodage binaire au lieu de chaînes contenant les noms de type dans le format d’entrée RowBinaryWithNamesAndTypes. | false |
output_format_binary_write_json_as_string | Permet d’écrire les valeurs du type de données JSON comme des valeurs JSON de type String dans le format de sortie RowBinary. | false |
input_format_binary_read_json_as_string | Permet de lire les valeurs du type de données JSON comme des valeurs JSON de type String dans le format d’entrée RowBinary. | false |