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フォーマットの使用
もう1つの列指向フォーマットとして、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 からデータをストリーミングできるようになります。
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 ストリーミング データの取得元の候補として、arrow-stream を使用してきました。
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 server を必要とせずにローカル/リモートファイルを扱える、移植性が高くフル機能を備えたツールです。