Skip to main content
Edit this page

ClickHouseでのAvro、Arrow、およびORCデータの操作

Apacheは、分析環境で広く使用される複数のデータフォーマットをリリースしており、その中には人気のあるAvroArrow、そしてOrcがあります。ClickHouseはリストから選択されたデータをインポートおよびエクスポートすることをサポートしています。

Avroフォーマットでのインポートとエクスポート

ClickHouseは、Hadoopシステムで広く使われているApache Avroデータファイルの読み取りと書き込みをサポートしています。

Avroファイルからインポートするには、INSERT文でAvroフォーマットを使用します:

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

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 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
                           path  hits
0 b'Akiba_Hebrew_Academy' 241
1 b'Aegithina_tiphia' 34
2 b'1971-72_Utah_Stars_season' 1

ClickHouseは同じ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サーバーを必要とせずにローカル/リモートファイルで作業するためのポータブルでフル機能のツールです。