10 KiB
sidebar_label | slug |
---|---|
バイナリとネイティブ | /ja/integrations/data-formats/binary-native |
ClickHouseでのネイティブおよびバイナリフォーマットの使用
ClickHouseは複数のバイナリフォーマットをサポートしており、これによりパフォーマンスとスペースの効率が向上します。バイナリフォーマットは、データがバイナリ形式で保存されるため、文字エンコーディングの安全性も確保されます。
ここでは、デモンストレーション用に some_data
テーブルおよびデータを使用します。ご自身のClickHouseインスタンスで再現してみてください。
ネイティブClickHouseフォーマットでのエクスポート
ClickHouseノード間でデータをエクスポートおよびインポートする最も効率的なデータフォーマットはネイティブフォーマットです。エクスポートは INTO OUTFILE
句を使用して行われます:
SELECT * FROM some_data
INTO OUTFILE 'data.clickhouse' FORMAT Native
これにより、ネイティブフォーマットのdata.clickhouseファイルが作成されます。
ネイティブフォーマットからのインポート
データをインポートするには、小さなファイルや探索目的でfile()を使用できます:
DESCRIBE file('data.clickhouse', Native);
┌─name──┬─type───┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┬─ttl_expression─┐
│ path │ String │ │ │ │ │ │
│ month │ Date │ │ │ │ │ │
│ hits │ UInt32 │ │ │ │ │ │
└───────┴────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┘
:::tip
file()
関数を使用する場合、ClickHouse Cloudではファイルが存在するマシン上で clickhouse client
でコマンドを実行する必要があります。他のオプションとしてclickhouse-local
を使用してローカルでファイルを探索することができます。
:::
本番環境では、FROM INFILE
を使用してデータをインポートします:
INSERT INTO sometable
FROM INFILE 'data.clickhouse'
FORMAT Native
ネイティブフォーマットの圧縮
データをネイティブフォーマットにエクスポートする際(および他のほとんどのフォーマット)に、COMPRESSION
句を使用して圧縮を有効にすることもできます:
SELECT * FROM some_data
INTO OUTFILE 'data.clickhouse'
COMPRESSION 'lz4'
FORMAT Native
エクスポートにはLZ4圧縮を使用しました。データをインポートするときにはそれを指定する必要があります:
INSERT INTO sometable
FROM INFILE 'data.clickhouse'
COMPRESSION 'lz4'
FORMAT Native
RowBinaryへのエクスポート
サポートされているもう一つのバイナリフォーマットはRowBinaryで、バイナリ表現された行でデータをインポートおよびエクスポートできます:
SELECT * FROM some_data
INTO OUTFILE 'data.binary' FORMAT RowBinary
これにより、バイナリ行形式のdata.binaryファイルが生成されます。
RowBinaryファイルの探索
このフォーマットでは自動スキーマ推論はサポートされていないので、読み込む前にスキーマを明示的に定義する必要があります:
SELECT *
FROM file('data.binary', RowBinary, 'path String, month Date, hits UInt32')
LIMIT 5
┌─path───────────────────────────┬──────month─┬─hits─┐
│ Bangor_City_Forest │ 2015-07-01 │ 34 │
│ Alireza_Afzal │ 2017-02-01 │ 24 │
│ Akhaura-Laksam-Chittagong_Line │ 2015-09-01 │ 30 │
│ 1973_National_500 │ 2017-10-01 │ 80 │
│ Attachment │ 2017-09-01 │ 1356 │
└────────────────────────────────┴────────────┴──────┘
RowBinaryWithNamesを利用すると、カラム一覧を含むヘッダー行も追加されます。RowBinaryWithNamesAndTypesでは、カラムタイプを含む追加のヘッダー行も追加されます。
RowBinaryファイルからのインポート
RowBinaryファイルからデータを読み込むには、FROM INFILE
句を使用します:
INSERT INTO sometable
FROM INFILE 'data.binary'
FORMAT RowBinary
RawBLOBを使用した単一バイナリ値のインポート
バイナリファイル全体を読み込み、テーブルのフィールドに保存したい場合があります。このような場合には、RawBLOB形式を使用できます。この形式は単一カラムテーブルでのみ直接使用できます:
CREATE TABLE images(data String) Engine = Memory
画像ファイルを images
テーブルに保存してみましょう:
cat image.jpg | clickhouse-client -q "INSERT INTO images FORMAT RawBLOB"
data
フィールドの長さを確認すると、元のファイルサイズと等しくなります:
SELECT length(data) FROM images
┌─length(data)─┐
│ 6121 │
└──────────────┘
RawBLOBデータのエクスポート
この形式はまた、INTO OUTFILE
句を使用してデータをエクスポートする際にも使用できます:
SELECT * FROM images LIMIT 1
INTO OUTFILE 'out.jpg'
FORMAT RawBLOB
LIMIT 1
を使用する必要があるのは、複数の値をエクスポートするとファイルが破損するためです。
MessagePack
ClickHouseはMessagePackを使用してMsgPackのインポートとエクスポートをサポートしています。MessagePack形式にエクスポートするには:
SELECT *
FROM some_data
INTO OUTFILE 'data.msgpk'
FORMAT MsgPack
MessagePackファイルからデータをインポートするには:
INSERT INTO sometable
FROM INFILE 'data.msgpk'
FORMAT MsgPack
プロトコルバッファ
プロトコルバッファを使用するには、まずスキーマファイルを定義する必要があります:
syntax = "proto3";
message MessageType {
string path = 1;
date month = 2;
uint32 hits = 3;
};
このスキーマファイルのパス(私たちの場合はschema.proto
)は、Protobufフォーマット用のformat_schema
設定オプションに設定されます:
SELECT * FROM some_data
INTO OUTFILE 'proto.bin'
FORMAT Protobuf
SETTINGS format_schema = 'schema:MessageType'
これにより、データがproto.binファイルに保存されます。ClickHouseはProtobufデータのインポートやネストされたメッセージもサポートしています。ProtobufSingleを使用して、単一のプロトコルバッファメッセージを扱うことも検討してください(この場合、長さ区切りは省略されます)。
Cap’n Proto
ClickHouseがサポートするもう一つの人気のあるバイナリシリアライゼーションフォーマットはCap’n Protoです。Protobuf
形式と同様に、スキーマファイル(schema.capnp)を定義する必要があります:
@0xec8ff1a10aa10dbe;
struct PathStats {
path @0 :Text;
month @1 :UInt32;
hits @2 :UInt32;
}
このスキーマを使用してCapnProtoフォーマットでインポートとエクスポートを行います:
SELECT
path,
CAST(month, 'UInt32') AS month,
hits
FROM some_data
INTO OUTFILE 'capnp.bin'
FORMAT CapnProto
SETTINGS format_schema = 'schema:PathStats'
CapnProto
対応の型に合わせるため、Date
カラムをUInt32
としてキャストする必要があることに注意してください。
その他のフォーマット
ClickHouseでは、さまざまなシナリオやプラットフォームに対応するために、多くのフォーマット、テキストフォーマットとバイナリフォーマットの両方が導入されています。以下の記事で、さらに多くのフォーマットとそれを扱う方法を探索してください:
- CSVおよびTSVフォーマット
- Parquet
- JSONフォーマット
- 正規表現とテンプレート
- ネイティブおよびバイナリフォーマット
- SQLフォーマット
また、clickhouse-localもチェックし、ClickHouseサーバーを起動せずにローカル/リモートファイルで作業するためのポータブルな完全機能のツールです。