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