ClickHouse におけるネイティブ形式とバイナリ形式の利用
ClickHouse は複数のバイナリ形式をサポートしており、高いパフォーマンスと優れたスペース効率を実現します。バイナリ形式では、データがバイナリのまま保存されるため、文字エンコーディングの点でも安全です。
このガイドでは、デモ用に some_data テーブル と データ を使用します。お使いの ClickHouse インスタンスでも自由に再現して試してみてください。
ネイティブ ClickHouse 形式でのエクスポート
ClickHouse ノード間でデータをエクスポートおよびインポートする際に最も効率的なのは、Native 形式です。エクスポートは INTO OUTFILE 句を使用して行います。
これにより、ネイティブ形式の data.clickhouse ファイルが作成されます。
ネイティブ形式からのインポート
データをインポートするには、小さなファイルやデータ探索の目的であれば、file() を使用できます。
file() 関数を使用する場合、ClickHouse Cloud を利用しているときは、ファイルが存在するマシン上で clickhouse client を実行する必要があります。別の方法として、clickhouse-local を使用してローカルでファイルを確認できます。
本番環境では、データのインポートに FROM INFILE を使用します。
ネイティブ形式での圧縮
COMPRESSION 句を使用して、データをネイティブ形式(およびほとんどの他の形式)でエクスポートする際に圧縮を有効にすることもできます。
エクスポートには LZ4 圧縮を使用しました。データをインポートする際にも、同じ圧縮方式を指定する必要があります。
RowBinary へのエクスポート
サポートされている別のバイナリ形式として RowBinary があり、この形式を使うと、行単位でバイナリ表現されたデータのインポートおよびエクスポートが可能です。
これはバイナリ行形式で data.binary ファイルを生成します。
RowBinary ファイルの確認
この形式ではスキーマの自動推論はサポートされていないため、ロード前に内容を確認するには、スキーマを明示的に定義する必要があります。
RowBinaryWithNames の使用を検討してください。これは列リストを含むヘッダー行も追加します。RowBinaryWithNamesAndTypes は、さらに列の型を含むヘッダー行を追加します。
RowBinary ファイルからのインポート
RowBinary ファイルからデータを読み込むには、FROM INFILE 句を使用します。
RawBLOB を使用した単一のバイナリ値のインポート
バイナリファイル全体を読み取り、その内容をテーブルのフィールドに保存したいとします。 このような場合には RawBLOB フォーマット を使用できます。このフォーマットは、1 列だけを持つテーブルでのみ直接使用できます。
それでは、images テーブルに画像ファイルを保存してみましょう:
data フィールドの長さを確認すると、元のファイルサイズと等しいことが確認できます。
RawBLOB データのエクスポート
この形式は、INTO OUTFILE 句を使用したデータのエクスポートにも利用できます。
なお、LIMIT 1 を使用する必要があるのは、複数の値をエクスポートするとファイルが破損してしまうためです。
MessagePack
ClickHouse は、MsgPack フォーマットを使用して MessagePack 形式でのインポートおよびエクスポートをサポートしています。MessagePack 形式でエクスポートするには、次のとおりです。
MessagePack ファイル からデータをインポートするには、次のようにします。
Protocol Buffers
Protocol Buffers を利用するには、まず スキーマファイル を定義する必要があります。
このスキーマファイルへのパス(ここでは schema.proto)は、Protobuf 形式の format_schema 設定オプションで指定します。
これはデータを proto.bin ファイルに保存します。ClickHouse では Protobuf データおよびネストされたメッセージのインポートもサポートしています。単一の Protocol Buffer メッセージを扱う場合は、ProtobufSingle の使用を検討してください(この場合、長さ区切りは省略されます)。
Cap'n Proto
ClickHouse がサポートしている、もう 1 つの一般的なバイナリシリアライゼーション形式が Cap'n Proto です。Protobuf フォーマットの場合と同様に、この例でもスキーマファイル(schema.capnp)を定義する必要があります。
これで、CapnProto 形式と次のスキーマを使ってインポートおよびエクスポートできます。
Date 列を UInt32 にキャストして、対応する型を揃える必要がある点に注意してください。
その他のフォーマット
ClickHouse は、多くのフォーマット(テキストおよびバイナリの両方)をサポートしており、さまざまなシナリオやプラットフォームをカバーします。以下の記事で、より多くのフォーマットとその扱い方を確認してください。
- CSV および TSV フォーマット
- Parquet
- JSON フォーマット
- 正規表現とテンプレート
- ネイティブおよびバイナリフォーマット
- SQL フォーマット
あわせて clickhouse-local も参照してください。ClickHouse サーバーを起動せずに、ローカル/リモートのファイルを操作できる、ポータブルなフル機能ツールです。