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

Работа с данными Avro, Arrow и ORC в ClickHouse

Apache разработал несколько форматов данных, активно используемых в аналитических системах, включая популярные Avro, Arrow и ORC. ClickHouse поддерживает импорт и экспорт данных с использованием любого из этих форматов.

Импорт и экспорт в формате Avro

ClickHouse поддерживает чтение и запись файлов данных Apache Avro, которые широко используются в системах Hadoop.

Чтобы импортировать данные из файла в формате Avro, следует использовать формат Avro в операторе INSERT:

INSERT INTO sometable
FROM INFILE 'data.avro'
FORMAT Avro

С помощью функции file() мы также можем изучить файлы Avro до непосредственного импорта данных:

SELECT path, hits
FROM file('data.avro', Avro)
ORDER BY hits DESC
LIMIT 5;
┌─path────────────┬──hits─┐
│ Amy_Poehler     │ 62732 │
│ Adam_Goldberg   │ 42338 │
│ Aaron_Spelling  │ 25128 │
│ Absence_seizure │ 18152 │
│ Ammon_Bundy     │ 11890 │
└─────────────────┴───────┘

Для экспорта в файл Avro:

SELECT * FROM sometable
INTO OUTFILE 'export.avro'
FORMAT Avro;

Типы данных Avro и ClickHouse

Учитывайте соответствие типов данных при импорте и экспорте файлов Avro. Используйте явное приведение типов для преобразования данных при загрузке их из файлов Avro:

SELECT
    date,
    toDate(date)
FROM file('data.avro', Avro)
LIMIT 3;
┌──date─┬─toDate(date)─┐
│ 16556 │   2015-05-01 │
│ 16556 │   2015-05-01 │
│ 16556 │   2015-05-01 │
└───────┴──────────────┘

Сообщения Avro в Kafka

Когда сообщения Kafka находятся в формате Avro, ClickHouse может читать такие потоки с помощью формата AvroConfluent и движка Kafka:

CREATE TABLE some_topic_stream
(
    field1 UInt32,
    field2 String
)
ENGINE = Kafka() SETTINGS
kafka_broker_list = 'localhost',
kafka_topic_list = 'some_topic',
kafka_group_name = 'some_group',
kafka_format = 'AvroConfluent';

Работа с форматом Arrow

Ещё один колоночный формат — Apache Arrow, который также поддерживается ClickHouse для импорта и экспорта данных. Чтобы импортировать данные из файла в формате Arrow, мы используем формат Arrow:

INSERT INTO sometable
FROM INFILE 'data.arrow'
FORMAT Arrow

Экспорт в файл Arrow выполняется аналогичным образом:

SELECT * FROM sometable
INTO OUTFILE 'export.arrow'
FORMAT Arrow

Также ознакомьтесь с соответствием типов данных, чтобы определить, какие из них нужно преобразовать вручную.

Потоковая передача данных Arrow

Формат ArrowStream можно использовать для работы с потоковой передачей Arrow (используется для обработки данных в памяти). ClickHouse может читать и записывать потоки Arrow.

Чтобы продемонстрировать, как ClickHouse может передавать данные Arrow в потоке, перенаправим их в следующий скрипт на Python (он читает входной поток в потоковом формате Arrow и выводит результат в виде таблицы Pandas):

import sys, pyarrow as pa

with pa.ipc.open_stream(sys.stdin.buffer) as reader:
  print(reader.read_pandas())

Теперь мы можем потоково передавать данные из ClickHouse, перенаправляя его вывод в скрипт:

clickhouse-client -q "SELECT path, hits FROM some_data LIMIT 3 FORMAT ArrowStream" | python3 arrow.py
                           путь  обращений
0       b'Akiba_Hebrew_Academy'   241
1           b'Aegithina_tiphia'    34
2  b'1971-72_Utah_Stars_season'     1

ClickHouse также может читать потоки Arrow в том же формате ArrowStream:

arrow-stream | clickhouse-client -q "INSERT INTO sometable FORMAT ArrowStream"

Мы использовали arrow-stream как один из возможных источников потоковых данных Arrow.

Импорт и экспорт данных ORC

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

SELECT *
FROM sometable
INTO OUTFILE 'data.orc'
FORMAT ORC;

INSERT INTO sometable
FROM INFILE 'data.orc'
FORMAT ORC;

Также проверьте соответствие типов данных и дополнительные настройки для настройки экспорта и импорта.

Дополнительные материалы

ClickHouse поддерживает множество форматов, как текстовых, так и бинарных, чтобы охватить различные сценарии и платформы. Узнайте больше о форматах и способах работы с ними в следующих статьях:

А также ознакомьтесь с clickhouse-local — переносимым полнофункциональным инструментом для работы с локальными и удалёнными файлами без необходимости в сервере ClickHouse.