Le format BSONEachRow analyse les données comme une séquence de documents Binary JSON (BSON), sans aucun séparateur entre eux.
Chaque ligne est représentée par un document unique, et chaque colonne par un champ unique du document BSON, avec le nom de la colonne comme clé.
Correspondance des types de données
Pour la sortie, la correspondance suivante est utilisée entre les types ClickHouse et les types BSON :
| Type ClickHouse | Type BSON |
|---|
| Bool | \x08 booléen |
| Int8/UInt8/Enum8 | \x10 int32 |
| Int16/UInt16/Enum16 | \x10 int32 |
| Int32 | \x10 int32 |
| UInt32 | \x12 int64 |
| Int64/UInt64 | \x12 int64 |
| Float32/Float64 | \x01 double |
| Date/Date32 | \x10 int32 |
| DateTime | \x12 int64 |
| DateTime64 | \x09 datetime |
| Decimal32 | \x10 int32 |
| Decimal64 | \x12 int64 |
| Decimal128 | \x05 binaire, \x00 sous-type binaire, taille = 16 |
| Decimal256 | \x05 binaire, \x00 sous-type binaire, taille = 32 |
| Int128/UInt128 | \x05 binaire, \x00 sous-type binaire, taille = 16 |
| Int256/UInt256 | \x05 binaire, \x00 sous-type binaire, taille = 32 |
| String/FixedString | \x05 binaire, \x00 sous-type binaire ou \x02 chaîne si le paramètre output_format_bson_string_as_string est activé |
| UUID | \x05 binaire, \x04 sous-type uuid, taille = 16 |
| Array | \x04 array |
| Tuple | \x04 array |
| Named Tuple | \x03 document |
| Map | \x03 document |
| IPv4 | \x10 int32 |
| IPv6 | \x05 binaire, \x00 sous-type binaire |
Pour l’entrée, la correspondance suivante est utilisée entre les types BSON et les types ClickHouse :
| Type BSON | Type ClickHouse |
|---|
\x01 double | Float32/Float64 |
\x02 chaîne | String/FixedString |
\x03 document | Map/Named Tuple |
\x04 array | Array/Tuple |
\x05 binaire, \x00 sous-type binaire | String/FixedString/IPv6 |
\x05 binaire, \x02 ancien sous-type binaire | String/FixedString |
\x05 binaire, \x03 ancien sous-type uuid | UUID |
\x05 binaire, \x04 sous-type uuid | UUID |
\x07 ObjectId | String/FixedString |
\x08 booléen | Bool |
\x09 datetime | DateTime64 |
\x0A valeur NULL | NULL |
\x0D code JavaScript | String/FixedString |
\x0E symbole | String/FixedString |
\x10 int32 | Int32/UInt32/Decimal32/IPv4/Enum8/Enum16 |
\x12 int64 | Int64/UInt64/Decimal64/DateTime64 |
Les autres types BSON ne sont pas pris en charge. De plus, ce format effectue des conversions entre différents types entiers.
Par exemple, il est possible d’insérer dans ClickHouse une valeur BSON int32 en tant que UInt8.
Les grands entiers et les types décimaux comme Int128/UInt128/Int256/UInt256/Decimal128/Decimal256 peuvent être interprétés à partir d’une valeur BSON binaire avec le sous-type binaire \x00.
Dans ce cas, le format vérifie que la taille des données binaires correspond à celle de la valeur attendue.
Ce format ne fonctionne pas correctement sur les plates-formes big-endian.
À l’aide d’un fichier BSON nommé football.bson et contenant les données suivantes :
┌───────date─┬─season─┬─home_team─────────────┬─away_team───────────┬─home_team_goals─┬─away_team_goals─┐
1. │ 2022-04-30 │ 2021 │ Sutton United │ Bradford City │ 1 │ 4 │
2. │ 2022-04-30 │ 2021 │ Swindon Town │ Barrow │ 2 │ 1 │
3. │ 2022-04-30 │ 2021 │ Tranmere Rovers │ Oldham Athletic │ 2 │ 0 │
4. │ 2022-05-02 │ 2021 │ Port Vale │ Newport County │ 1 │ 2 │
5. │ 2022-05-02 │ 2021 │ Salford City │ Mansfield Town │ 2 │ 2 │
6. │ 2022-05-07 │ 2021 │ Barrow │ Northampton Town │ 1 │ 3 │
7. │ 2022-05-07 │ 2021 │ Bradford City │ Carlisle United │ 2 │ 0 │
8. │ 2022-05-07 │ 2021 │ Bristol Rovers │ Scunthorpe United │ 7 │ 0 │
9. │ 2022-05-07 │ 2021 │ Exeter City │ Port Vale │ 0 │ 1 │
10. │ 2022-05-07 │ 2021 │ Harrogate Town A.F.C. │ Sutton United │ 0 │ 2 │
11. │ 2022-05-07 │ 2021 │ Hartlepool United │ Colchester United │ 0 │ 2 │
12. │ 2022-05-07 │ 2021 │ Leyton Orient │ Tranmere Rovers │ 0 │ 1 │
13. │ 2022-05-07 │ 2021 │ Mansfield Town │ Forest Green Rovers │ 2 │ 2 │
14. │ 2022-05-07 │ 2021 │ Newport County │ Rochdale │ 0 │ 2 │
15. │ 2022-05-07 │ 2021 │ Oldham Athletic │ Crawley Town │ 3 │ 3 │
16. │ 2022-05-07 │ 2021 │ Stevenage Borough │ Salford City │ 4 │ 2 │
17. │ 2022-05-07 │ 2021 │ Walsall │ Swindon Town │ 0 │ 3 │
└────────────┴────────┴───────────────────────┴─────────────────────┴─────────────────┴─────────────────┘
Insérez les données :
INSERT INTO football FROM INFILE 'football.bson' FORMAT BSONEachRow;
Lisez les données à l’aide du format BSONEachRow :
SELECT *
FROM football INTO OUTFILE 'docs_data/bson/football.bson'
FORMAT BSONEachRow
BSON est un format binaire qui ne s’affiche pas sous une forme lisible dans un terminal. Utilisez INTO OUTFILE pour produire des fichiers BSON.
| Paramètre | Description | Par défaut |
|---|
output_format_bson_string_as_string | Utiliser le type String de BSON au lieu de Binary pour les colonnes de type String. | false |
input_format_bson_skip_fields_with_unsupported_types_in_schema_inference | Autoriser l’omission des colonnes dont les types ne sont pas pris en charge lors de l’inférence du schéma pour le format BSONEachRow. | false |