ClickHouseにおけるネイティブおよびバイナリ形式の使用
ClickHouseは複数のバイナリ形式をサポートしており、これによりパフォーマンスとスペース効率が向上します。バイナリ形式は、データがバイナリ形式で保存されるため、文字エンコーディングに対しても安全です。
デモンストレーションには some_data table と 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形式を使用できます。この形式は、単一カラムのテーブルでのみ直接使用可能です:
images
テーブルに画像ファイルを保存しましょう:
data
フィールドの長さを確認すると、それは元のファイルサイズと等しくなります:
RawBLOBデータのエクスポート
この形式は、INTO OUTFILE
句を使用してデータをエクスポートするためにも使用できます:
注意点として、複数の値をエクスポートするにはLIMIT 1
を使用する必要があります。そうしないと、破損したファイルが作成されます。
MessagePack
ClickHouseは、MessagePackへのインポートおよびエクスポートをMsgPackを使用してサポートしています。MessagePack形式にエクスポートするには:
MessagePackファイルからデータをインポートするには:
プロトコルバッファ
Protocol Buffersを使用するには、まずスキーマファイルを定義する必要があります:
このスキーマファイルへのパス(この場合 schema.proto
)は、Protobuf形式の設定オプションであるformat_schema
に設定されます:
これによりdata.protoファイルにデータが保存されます。ClickHouseはProtobufデータのインポートおよびネストされたメッセージもサポートしています。単一のProtocol Bufferメッセージで作業するためにProtobufSingleを使用することを検討してください(この場合、長さデリミタは省略されます)。
Cap'n Proto
ClickHouseがサポートするもう一つの人気のあるバイナリシリアライズ形式はCap'n Protoです。Protobuf
形式と同様に、私たちの例ではスキーマファイル(schema.capnp
)を定義する必要があります:
これで、CapnProto形式とこのスキーマを使用してインポートおよびエクスポートが可能になります:
Date
カラムをUInt32
としてキャストする必要があることに注意してください。これは対応する型を一致させるためです。
その他の形式
ClickHouseは、さまざまなシナリオやプラットフォームをカバーするために、テキスト形式とバイナリ形式の多くをサポートしています。以下の記事でさらに多くの形式やそれらを扱う方法を探索してください:
- CSVおよびTSV形式
- Parquet
- JSON形式
- Regexおよびテンプレート
- ネイティブおよびバイナリ形式
- SQL形式
また、clickhouse-localをチェックしてください。これはClickHouseサーバーを起動せずにローカル/リモートファイルで作業できる、ポータブルでフル機能のツールです。