El formato BSONEachRow interpreta los datos como una secuencia de documentos Binary JSON (BSON) sin ningún separador entre ellos.
Cada fila se representa como un único documento y cada columna como un único campo de documento BSON, con el nombre de la columna como clave.
Correspondencia de tipos de datos
Para la salida, se utiliza la siguiente correspondencia entre los tipos de ClickHouse y los tipos BSON:
| Tipo de ClickHouse | Tipo BSON |
|---|
| Bool | \x08 boolean |
| 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 binary, \x00 binary subtype, tamaño = 16 |
| Decimal256 | \x05 binary, \x00 binary subtype, tamaño = 32 |
| Int128/UInt128 | \x05 binary, \x00 binary subtype, tamaño = 16 |
| Int256/UInt256 | \x05 binary, \x00 binary subtype, tamaño = 32 |
| String/FixedString | \x05 binary, \x00 binary subtype o \x02 string si la configuración output_format_bson_string_as_string está habilitada |
| UUID | \x05 binary, \x04 uuid subtype, tamaño = 16 |
| Array | \x04 array |
| Tuple | \x04 array |
| Named Tuple | \x03 document |
| Map | \x03 document |
| IPv4 | \x10 int32 |
| IPv6 | \x05 binary, \x00 binary subtype |
Para la entrada, se utiliza la siguiente correspondencia entre los tipos BSON y los tipos de ClickHouse:
| Tipo BSON | Tipo de ClickHouse |
|---|
\x01 doble | Float32/Float64 |
\x02 string | String/FixedString |
\x03 documento | Map/Tupla con nombre |
\x04 array | Array/Tuple |
\x05 binario, subtipo binario \x00 | String/FixedString/IPv6 |
\x05 binario, subtipo binario antiguo \x02 | String/FixedString |
\x05 binario, subtipo uuid antiguo \x03 | UUID |
\x05 binario, subtipo uuid \x04 | UUID |
\x07 ObjectId | String/FixedString |
\x08 boolean | Bool |
\x09 datetime | DateTime64 |
\x0A valor NULL | NULL |
\x0D código JavaScript | String/FixedString |
\x0E símbolo | String/FixedString |
\x10 int32 | Int32/UInt32/Decimal32/IPv4/Enum8/Enum16 |
\x12 int64 | Int64/UInt64/Decimal64/DateTime64 |
No se admiten otros tipos BSON. Además, realiza conversiones entre distintos tipos enteros.
Por ejemplo, es posible insertar un valor BSON int32 en ClickHouse como UInt8.
Los enteros grandes y decimales, como Int128/UInt128/Int256/UInt256/Decimal128/Decimal256, se pueden analizar a partir de un valor BSON Binary con el subtipo binario \x00.
En este caso, el formato validará que el tamaño de los datos binarios coincida con el tamaño del valor esperado.
Este formato no funciona correctamente en plataformas Big-Endian.
Utiliza un archivo BSON con los siguientes datos, llamado football.bson:
┌───────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 │
└────────────┴────────┴───────────────────────┴─────────────────────┴─────────────────┴─────────────────┘
Inserta los datos:
INSERT INTO football FROM INFILE 'football.bson' FORMAT BSONEachRow;
Lea datos con el formato BSONEachRow:
SELECT *
FROM football INTO OUTFILE 'docs_data/bson/football.bson'
FORMAT BSONEachRow
BSON es un formato binario que no se puede ver en la terminal de forma legible para humanos. Use INTO OUTFILE para generar archivos BSON.
| Configuración | Descripción | Predeterminado |
|---|
output_format_bson_string_as_string | Usa el tipo String de BSON en lugar de Binary para las columnas String. | false |
input_format_bson_skip_fields_with_unsupported_types_in_schema_inference | Permite omitir columnas con tipos no compatibles durante la inferencia de esquema para el formato BSONEachRow. | false |