メインコンテンツまでスキップ
メインコンテンツまでスキップ

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ファイルからデータをインポートするには:

プロトコルバッファ

Not supported in ClickHouse Cloud

Protocol Buffersを使用するには、最初にスキーマファイルを定義する必要があります:

このスキーマファイルへのパス(この場合schema.proto)は、Protobuf形式のformat_schema設定オプションに設定します:

これにより、proto.binファイルにデータが保存されます。ClickHouseは、Protobufデータのインポートとネストされたメッセージもサポートしています。単一のProtocol Bufferメッセージで作業するには、ProtobufSingleを使用してください(この場合、長さ区切り子は省略されます)。

Cap'n Proto

Not supported in ClickHouse Cloud

ClickHouseがサポートするもう一つの人気のバイナリシリアル化形式はCap'n Protoです。Protobuf形式と同様に、私たちの例ではスキーマファイル(schema.capnp)を定義する必要があります:

このスキーマを使用して、CapnProto形式でデータをインポートおよびエクスポートできます:

DateカラムをUInt32にキャストする必要があったことに注意してください。これは対応する型の一致が必要だからです。

その他の形式

ClickHouseは、さまざまなシナリオやプラットフォームに対応するために、テキスト形式とバイナリ形式の両方をサポートします。さまざまな形式やそれらとの作業方法については、以下の記事を参照してください:

また、clickhouse-localもチェックしてください。これは、ClickHouseサーバーを起動せずにローカルやリモートのファイルで作業するための、持ち運び可能なフル機能ツールです。