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 streaming и выводит результат в виде таблицы 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 path hits
0 b'Akiba_Hebrew_Academy' 241
1 b'Aegithina_tiphia' 34
2 b'1971-72_Utah_Stars_season' 1ClickHouse также может читать потоки 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.