Passer au contenu principal
EntréeSortieAlias

Description

Semblable au format 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

L’en-tête est identique à RowBinaryWithNamesAndTypes :
  1. Un VarUInt indiquant le nombre de colonnes N.
  2. N String précédées de leur longueur, contenant les noms de colonnes.
  3. N types de colonnes — soit des noms textuels, soit un encodage binaire compact, selon les paramètres output_format_binary_encode_types_in_binary_format / input_format_binary_decode_types_in_binary_format.
Après l’en-tête, chaque ligne se compose de N cellules. Pour chaque cellule :
  • Un unique octet marqueur UInt8.
    • 0x01 — utilise l’expression DEFAULT de la colonne cible. Aucun octet de valeur ne suit.
    • 0x00 — une valeur suit, sérialisée avec le sérialiseur RowBinary du type de colonne. Pour Nullable(T), les octets de valeur commencent par l’octet NULL de Nullable (0 pour non-NULL, 1 pour NULL), puis par la valeur interne si elle n’est pas NULL.

Valeurs par défaut vs NULL

Le marqueur de valeur par cellule et l’octet NULL intégré à Nullable sont indépendants. Une colonne Nullable(UInt32) DEFAULT 42 peut être envoyée de trois façons différentes pour chaque ligne :
OctetsSignification
01Utiliser DEFAULT 42.
00 01Chemin de valeur, puis NULL via le type Nullable.
00 00 …Chemin de valeur, puis une valeur interne non nulle.

Évolution du schéma

CasComportement
Colonne entièrement absente de l’en-tête du fichierRemplie dans la cible via insertDefaultsForNotSeenColumns ; contrôlée par defaults_for_omitted_fields.
Colonne présente dans l’en-tête, marqueur de cellule 0x01insertDefault pour chaque ligne.
Colonne présente dans l’en-tête, marqueur de cellule 0x00La valeur est parsée normalement.
Colonne supplémentaire dans l’en-tête, absente de la table cibleIgnoré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
SELECT * FROM format(
    'RowBinaryWithNamesAndTypesAndDefaults',
    'x Nullable(UInt32) DEFAULT 42',
    unhex('01' || '0178' || '10' || hex('Nullable(UInt32)') || '01')
);
Response
┌──x─┐
│ 42 │
└────┘
  • L’en-tête comprend une colonne nommée x de type Nullable(UInt32).
  • L’unique cellule utilise le marqueur 0x01, ce qui signifie “utiliser DEFAULT 42”.

Paramètres de format

Les paramètres suivants sont communs à tous les formats de type RowBinary.
ParamètreDescriptionPar défaut
format_binary_max_string_sizeTaille maximale autorisée pour String dans le format RowBinary.1GiB
output_format_binary_encode_types_in_binary_formatPermet 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_formatPermet 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_stringPermet 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_stringPermet 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
Dernière modification le 25 juin 2026