Apache는 분석 환경에서 활발히 사용되는 여러 데이터 포맷을 제공하고 있으며, 여기에는 널리 사용되는 Avro, Arrow, Orc가 포함됩니다. ClickHouse는 이들 포맷을 사용한 데이터 가져오기와 내보내기를 지원합니다.
Avro 포맷으로 가져오기 및 내보내기
ClickHouse는 Hadoop 시스템에서 널리 사용되는 Apache Avro 데이터 파일을 읽고 쓰는 기능을 지원합니다.
avro file에서 가져오려면 INSERT 문에서 Avro 포맷을 사용해야 합니다:
INSERT INTO sometable
FROM INFILE 'data.avro'
FORMAT Avrofile() 함수를 사용하면 데이터를 실제로 가져오기 전에 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 │
└───────┴──────────────┘Kafka의 Avro 메시지
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 ArrowArrow 파일로 내보내는 방법도 동일합니다:
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 path hits
0 b'Akiba_Hebrew_Academy' 241
1 b'Aegithina_tiphia' 34
2 b'1971-72_Utah_Stars_season' 1ClickHouse는 같은 ArrowStream 포맷으로 Arrow 스트림도 읽을 수 있습니다:
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 서버 없이도 로컬/원격 파일을 대상으로 작업할 수 있는, 이식성이 뛰어난 완전한 기능의 도구입니다.