Перейти к основному содержимому
Перейти к основному содержимому

Parquet

InputOutputAlias

Описание

Apache Parquet — это столбцовый формат хранения, широко используемый в экосистеме Hadoop. ClickHouse поддерживает операции чтения и записи для этого формата.

Сопоставление типов данных

В таблице ниже представлены поддерживаемые типы данных и то, как они сопоставляются с типами данных в ClickHouse при выполнении запросов INSERT и SELECT.

Тип данных Parquet (INSERT)Тип данных ClickHouseТип данных Parquet (SELECT)
BOOLBoolBOOL
UINT8, BOOLUInt8UINT8
INT8Int8/Enum8INT8
UINT16UInt16UINT16
INT16Int16/Enum16INT16
UINT32UInt32UINT32
INT32Int32INT32
UINT64UInt64UINT64
INT64Int64INT64
FLOATFloat32FLOAT
DOUBLEFloat64DOUBLE
DATEDate32DATE
TIME (ms)DateTimeUINT32
TIMESTAMP, TIME (us, ns)DateTime64TIMESTAMP
STRING, BINARYStringBINARY
STRING, BINARY, FIXED_LENGTH_BYTE_ARRAYFixedStringFIXED_LENGTH_BYTE_ARRAY
DECIMALDecimalDECIMAL
LISTArrayLIST
STRUCTTupleSTRUCT
MAPMapMAP
UINT32IPv4UINT32
FIXED_LENGTH_BYTE_ARRAY, BINARYIPv6FIXED_LENGTH_BYTE_ARRAY
FIXED_LENGTH_BYTE_ARRAY, BINARYInt128/UInt128/Int256/UInt256FIXED_LENGTH_BYTE_ARRAY
JSONJSONJSON

Массивы могут быть вложенными и могут иметь значение типа Nullable в качестве аргумента. Типы Tuple и Map также могут быть вложенными.

Поддерживаемые типы данных Parquet:

  • FIXED_SIZE_BINARY
  • UUID
  • ENUM.

Типы данных столбцов таблицы ClickHouse могут отличаться от соответствующих полей вставляемых данных Parquet. При вставке данных ClickHouse интерпретирует типы данных в соответствии с таблицей выше и затем приводит типы данных к тому типу, который установлен для столбца таблицы ClickHouse.

Пример использования

Вставка данных

Используя файл Parquet с следующими данными, названный football.parquet:

    ┌───────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 │
    └────────────┴────────┴───────────────────────┴─────────────────────┴─────────────────┴─────────────────┘

Вставить данные:

INSERT INTO football FROM INFILE 'football.parquet' FORMAT Parquet;

Чтение данных

Чтение данных с использованием формата Parquet:

SELECT *
FROM football
INTO OUTFILE 'football.parquet'
FORMAT Parquet
подсказка

Parquet — это двоичный формат, который не отображается в читаемом виде в терминале. Используйте INTO OUTFILE для вывода файлов Parquet.

Для обмена данными с Hadoop вы можете использовать HDFS table engine.

Настройки формата

НастройкаОписаниеПо умолчанию
input_format_parquet_case_insensitive_column_matchingИгнорировать регистр при сопоставлении столбцов Parquet со столбцами CH.0
input_format_parquet_preserve_orderИзбежать переупорядочивания строк при чтении из файлов Parquet. Обычно значительно замедляет процесс.0
input_format_parquet_filter_push_downПри чтении файлов Parquet пропускать целые группы строк на основе выражений WHERE/PREWHERE и минимальной/максимальной статистики в метаданных Parquet.1
input_format_parquet_bloom_filter_push_downПри чтении файлов Parquet пропускать целые группы строк на основе выражений WHERE и фильтра Блума в метаданных Parquet.0
input_format_parquet_use_native_readerПри чтении файлов Parquet использовать нативный ридер вместо ридера Arrow.0
input_format_parquet_allow_missing_columnsРазрешить отсутствие столбцов при чтении входных форматов Parquet1
input_format_parquet_local_file_min_bytes_for_seekМинимальное количество байтов, необходимых для локального чтения (файла) для выполнения поиска, вместо чтения с игнорированием в формате ввода Parquet8192
input_format_parquet_enable_row_group_prefetchВключить предварительную выборку групп строк во время разбора Parquet. В настоящее время только однопоточная обработка может выполнять предварительную выборку.1
input_format_parquet_skip_columns_with_unsupported_types_in_schema_inferenceПропускать столбцы с неподдерживаемыми типами при выводе схемы для формата Parquet0
input_format_parquet_max_block_sizeМаксимальный размер блока для ридера Parquet.65409
input_format_parquet_prefer_block_bytesСредний размер блока, выдаваемый ридером Parquet16744704
input_format_parquet_enable_json_parsingПри чтении файлов Parquet разбирать столбцы JSON как столбец JSON ClickHouse.1
output_format_parquet_row_group_sizeЦелевой размер группы строк в строках.1000000
output_format_parquet_row_group_size_bytesЦелевой размер группы строк в байтах, до сжатия.536870912
output_format_parquet_string_as_stringИспользовать тип Parquet String вместо Binary для строковых столбцов.1
output_format_parquet_fixed_string_as_fixed_byte_arrayИспользовать тип Parquet FIXED_LENGTH_BYTE_ARRAY вместо Binary для столбцов FixedString.1
output_format_parquet_versionВерсия формата Parquet для формата вывода. Поддерживаемые версии: 1.0, 2.4, 2.6 и 2.latest (по умолчанию)2.latest
output_format_parquet_compression_methodМетод сжатия для формата вывода Parquet. Поддерживаемые кодеки: snappy, lz4, brotli, zstd, gzip, none (несжатый)zstd
output_format_parquet_compliant_nested_typesВ схеме файла parquet использовать имя 'element' вместо 'item' для элементов списка. Это исторический артефакт реализации библиотеки Arrow. Как правило, повышает совместимость, кроме, возможно, с некоторыми старыми версиями Arrow.1
output_format_parquet_use_custom_encoderИспользовать более быстрые реализации кодировщика Parquet.1
output_format_parquet_parallel_encodingВыполнять кодирование Parquet в нескольких потоках. Требует output_format_parquet_use_custom_encoder.1
output_format_parquet_data_page_sizeЦелевой размер страницы в байтах, до сжатия.1048576
output_format_parquet_batch_sizeПроверять размер страницы каждые столько строк. Рассмотрите возможность уменьшения, если у вас есть столбцы со средним размером значений выше нескольких КБ.1024
output_format_parquet_write_page_indexДобавить возможность записывать индекс страницы в файлы parquet.1
input_format_parquet_import_nestedУстаревшая настройка, не делает ничего.0