> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-fix-nav-issues.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# ClickHouseでNative フォーマットとバイナリ形式を使う

> ClickHouseでNative フォーマットとバイナリ形式を使う方法を説明するページ

export const CloudNotSupportedBadge = () => {
  return <div className="cloudNotSupportedBadge">
            <div className="cloudNotSupportedIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.5" d="M6.33366 12.6666L12.3739 12.6667C13.6593 12.6667 14.7073 11.6187 14.7073 10.3334C14.7073 9.04804 13.6593 8.00003 12.3739 8.00003C12.3739 8.00003 12.3337 7.66659 12.0003 7.33325M10.667 5.33322C8.00033 2.33325 4.45395 4.78537 4.14195 6.68203C2.55728 6.7627 1.29395 8.06203 1.29395 9.6667C1.29395 11.3234 2.66699 12.6666 4.00033 12.6666" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.5" d="M2.66699 14L12.0003 4.66663" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>

        </div>
            Not supported in ClickHouse Cloud
        </div>;
};

ClickHouse は複数のバイナリ形式をサポートしており、これによりパフォーマンスと容量効率が向上します。バイナリ形式ではデータがバイナリで保存されるため、文字エンコーディングの面でも安全です。

ここではデモ用に some\_data の[テーブル](/ja/assets/some_data.sql)と[データ](/ja/assets/some_data.tsv)を使用します。必要に応じて、ご自身の ClickHouse インスタンスで再現してみてください。

<div id="exporting-in-a-native-clickhouse-format">
  ## ClickHouseNative フォーマットでのエクスポート
</div>

ClickHouseノード間でデータをエクスポートおよびインポートする際に最も効率的なデータフォーマットは、[Native](/ja/reference/formats/Native)フォーマットです。エクスポートは`INTO OUTFILE`句を使用して行います。

```sql theme={null}
SELECT * FROM some_data
INTO OUTFILE 'data.clickhouse' FORMAT Native
```

これにより、[data.clickhouse](/ja/assets/data.clickhouse) ファイルがNative フォーマットで作成されます。

<div id="importing-from-a-native-format">
  ### Native フォーマット からのインポート
</div>

データをインポートするには、小さなファイルや確認用途であれば、[file()](/ja/reference/functions/table-functions/file) を使用できます:

```sql theme={null}
DESCRIBE file('data.clickhouse', Native);
```

```response theme={null}
┌─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`](/ja/concepts/features/tools-and-utilities/clickhouse-local) を使ってローカルでファイルを調査することもできます。
</Tip>

本番環境では、データのインポートに `FROM INFILE` を使用します。

```sql theme={null}
INSERT INTO sometable
FROM INFILE 'data.clickhouse'
FORMAT Native
```

<div id="native-format-compression">
  ### Native フォーマットでの圧縮
</div>

`COMPRESSION` 句を使用すると、データをNative フォーマット (およびそのほかのほとんどのフォーマット) でエクスポートする際にも圧縮を有効にできます。

```sql theme={null}
SELECT * FROM some_data
INTO OUTFILE 'data.clickhouse'
COMPRESSION 'lz4'
FORMAT Native
```

エクスポートにはLZ4圧縮を使用しました。データをインポートする際にも、これを指定する必要があります。

```sql theme={null}
INSERT INTO sometable
FROM INFILE 'data.clickhouse'
COMPRESSION 'lz4'
FORMAT Native
```

<div id="exporting-to-rowbinary">
  ## RowBinary へのエクスポート
</div>

サポートされている別のバイナリ形式として、[RowBinary](/ja/reference/formats/RowBinary/RowBinary) があります。これを使用すると、データをバイナリ表現の行としてインポートおよびエクスポートできます。

```sql theme={null}
SELECT * FROM some_data
INTO OUTFILE 'data.binary' FORMAT RowBinary
```

これにより、[data.binary](/ja/assets/data.binary) ファイルがバイナリ行形式で生成されます。

<div id="exploring-rowbinary-files">
  ### RowBinary ファイルの内容確認
</div>

このフォーマットでは自動スキーマ推論がサポートされていないため、読み込む前に内容を確認するには、スキーマを明示的に定義する必要があります。

```sql theme={null}
SELECT *
FROM file('data.binary', RowBinary, 'path String, month Date, hits UInt32')
LIMIT 5
```

```response theme={null}
┌─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](/ja/reference/formats/RowBinary/RowBinaryWithNames) の使用も検討してください。これを使うと、カラム一覧を含むヘッダー行も追加されます。[RowBinaryWithNamesAndTypes](/ja/reference/formats/RowBinary/RowBinaryWithNamesAndTypes) を使うと、さらにカラムの型を含むヘッダー行も追加されます。

<div id="importing-from-rowbinary-files">
  ### RowBinaryファイルからのインポート
</div>

RowBinaryファイルからデータを読み込むには、`FROM INFILE`句を使用します。

```sql theme={null}
INSERT INTO sometable
FROM INFILE 'data.binary'
FORMAT RowBinary
```

<div id="importing-single-binary-value-using-rawblob">
  ## RawBLOB を使用した単一のバイナリ値のインポート
</div>

バイナリファイル全体を読み取り、テーブル内の1つのフィールドに保存したいとします。
このような場合に使用できるのが、[RawBLOB フォーマット](/ja/reference/formats/RawBLOB)です。このフォーマットは、単一カラムのテーブルでのみ直接使用できます。

```sql theme={null}
CREATE TABLE images(data String) ENGINE = Memory
```

画像ファイルを `images` テーブルに保存しましょう。

```bash theme={null}
cat image.jpg | clickhouse-client -q "INSERT INTO images FORMAT RawBLOB"
```

元のファイルサイズと一致する `data` フィールドの長さを確認できます:

```sql theme={null}
SELECT length(data) FROM images
```

```response theme={null}
┌─length(data)─┐
│         6121 │
└──────────────┘
```

<div id="exporting-rawblob-data">
  ### RawBLOBデータのエクスポート
</div>

このフォーマットでは、`INTO OUTFILE`句を使ってデータをエクスポートすることもできます。

```sql theme={null}
SELECT * FROM images LIMIT 1
INTO OUTFILE 'out.jpg'
FORMAT RawBLOB
```

複数の値をエクスポートするとファイルが破損してしまうため、`LIMIT 1` を使用する必要があった点に注意してください。

<div id="messagepack">
  ## MessagePack
</div>

ClickHouse は、[MsgPack](/ja/reference/formats/MsgPack) を使用した [MessagePack](https://msgpack.org/) 形式のインポートとエクスポートをサポートしています。MessagePack フォーマットでエクスポートするには:

```sql theme={null}
SELECT *
FROM some_data
INTO OUTFILE 'data.msgpk'
FORMAT MsgPack
```

[MessagePackファイル](/ja/assets/data.msgpk) からデータをインポートするには、

```sql theme={null}
INSERT INTO sometable
FROM INFILE 'data.msgpk'
FORMAT MsgPack
```

<div id="protocol-buffers">
  ## Protocol Buffers
</div>

[Protocol Buffers](/ja/reference/formats/Protobuf/Protobuf) を扱うには、まず [スキーマファイル](/ja/assets/schema.proto) を定義します。

```protobuf theme={null}
syntax = "proto3";

message MessageType {
  string path = 1;
  date month = 2;
  uint32 hits = 3;
};
```

このスキーマファイル (この場合は `schema.proto`) へのパスは、[Protobuf](/ja/reference/formats/Protobuf/Protobuf)フォーマットの`format_schema`設定オプションで指定します。

```sql theme={null}
SELECT * FROM some_data
INTO OUTFILE 'proto.bin'
FORMAT Protobuf
SETTINGS format_schema = 'schema:MessageType'
```

これにより、データは [proto.bin](/ja/assets/proto.bin) ファイルに保存されます。ClickHouse では、ネストされたメッセージに加えて、Protobuf データのインポートもサポートしています。単一の Protocol Buffer メッセージを扱う場合は、[ProtobufSingle](/ja/reference/formats/Protobuf/ProtobufSingle) の使用を検討してください (この場合、長さを示す区切り文字は省略されます) 。

<div id="capn-proto">
  ## Cap'n Proto
</div>

ClickHouse がサポートする、もう 1 つの一般的なバイナリシリアライゼーションフォーマットとして、[Cap'n Proto](https://capnproto.org/) があります。`Protobuf` 形式と同様に、この例でもスキーマファイル ([`schema.capnp`](/ja/assets/schema.capnp)) を定義する必要があります。

```response theme={null}
@0xec8ff1a10aa10dbe;

struct PathStats {
  path @0 :Text;
  month @1 :UInt32;
  hits @2 :UInt32;
}
```

これで、[CapnProto](/ja/reference/formats/CapnProto)フォーマットとこのスキーマを使用して、インポートとエクスポートができるようになりました。

```sql theme={null}
SELECT
    path,
    CAST(month, 'UInt32') AS month,
    hits
FROM some_data
INTO OUTFILE 'capnp.bin'
FORMAT CapnProto
SETTINGS format_schema = 'schema:PathStats'
```

`Date` カラムは、[対応する型に合わせる](/ja/reference/formats/CapnProto#data_types-matching-capnproto)ために `UInt32` にキャストする必要があった点に注意してください。

<div id="other-formats">
  ## その他のフォーマット
</div>

ClickHouse は、さまざまな用途やプラットフォームに対応するため、テキスト形式とバイナリ形式の両方を含む多くのフォーマットをサポートしています。さらに多くのフォーマットやその扱い方については、以下の記事を参照してください。

* [CSV と TSV フォーマット](/ja/guides/clickhouse/data-formats/csv-tsv)
* [Parquet](/ja/guides/clickhouse/data-formats/parquet)
* [JSON フォーマット](/ja/guides/clickhouse/data-formats/json/intro)
* [Regex と Template](/ja/guides/clickhouse/data-formats/templates-regex)
* **Native およびバイナリ形式**
* [SQL フォーマット](/ja/guides/clickhouse/data-formats/sql)

あわせて、[clickhouse-local](https://clickhouse.com/blog/extracting-converting-querying-local-files-with-sql-clickhouse-local) もご覧ください。これは、ClickHouse server を起動せずにローカル/リモートファイルを扱える、持ち運び可能なフル機能ツールです。
