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

> File テーブルエンジンは、サポートされているファイルフォーマット（`TabSeparated`、`Native` など）のいずれかで、データをファイルに保存します。

# File テーブルエンジン

File テーブルエンジンは、サポートされている[ファイルフォーマット](/ja/reference/formats/index#formats-overview) (`TabSeparated`、`Native` など) のいずれかを使用して、データをファイルに保存します。

使用例:

* ClickHouse からファイルへデータをエクスポートする。
* データをあるフォーマットから別のフォーマットに変換する。
* ディスク上のファイルを編集して、ClickHouse 内のデータを更新する。

<Note>
  このエンジンは現在 ClickHouse Cloud では利用できません。代わりに、[S3 table function を使用してください](/ja/reference/functions/table-functions/s3)。
</Note>

<div id="usage-in-clickhouse-server">
  ## ClickHouse Server での利用
</div>

```sql theme={null}
File(Format)
```

`Format` パラメータでは、利用可能なファイルフォーマットのいずれか 1 つを指定します。`SELECT`
クエリを実行するには、そのフォーマットが入力をサポートしている必要があり、`INSERT`
クエリを実行するには、出力をサポートしている必要があります。利用可能なフォーマットは
[フォーマット](/ja/reference/formats/index#formats-overview) セクションに一覧があります。

ClickHouse では、`File` に対してファイルシステム上のパスを指定できません。代わりに、サーバー設定の [path](/ja/reference/settings/server-settings/settings) setting で定義されたフォルダーが使用されます。

`File(Format)` を使用してテーブルを作成すると、そのフォルダー内に空のサブディレクトリが作成されます。そのテーブルにデータが書き込まれると、そのサブディレクトリ内の `data.Format` ファイルに保存されます。

このサブフォルダーとファイルはサーバーのファイルシステム上で手動で作成し、その後、対応する名前のテーブル情報に [ATTACH](/ja/reference/statements/attach) できます。これにより、そのファイルのデータをクエリできます。

<Note>
  この機能を使用する際は注意してください。ClickHouse は、このようなファイルに対する外部からの変更を追跡しません。ClickHouse 経由の書き込みと ClickHouse 外部での書き込みを同時に行った場合の結果は未定義です。
</Note>

<div id="example">
  ## 例
</div>

**1.** `file_engine_table` テーブルを作成します:

```sql theme={null}
CREATE TABLE file_engine_table (name String, value UInt32) ENGINE=File(TabSeparated)
```

デフォルトでは、ClickHouse は `/var/lib/clickhouse/data/default/file_engine_table` フォルダーを作成します。

**2.** `/var/lib/clickhouse/data/default/file_engine_table/data.TabSeparated` を手動で作成し、次の内容を書き込みます:

```bash theme={null}
$ cat data.TabSeparated
one 1
two 2
```

**3.** データにクエリを実行します:

```sql theme={null}
SELECT * FROM file_engine_table
```

```text theme={null}
┌─name─┬─value─┐
│ one  │     1 │
│ two  │     2 │
└──────┴───────┘
```

<div id="usage-in-clickhouse-local">
  ## ClickHouse-localでの使用
</div>

[clickhouse-local](/ja/concepts/features/tools-and-utilities/clickhouse-local) では、Fileエンジンは `Format` に加えてファイルパスも受け付けます。デフォルトの入出力ストリームは、`0` または `stdin`、`1` または `stdout` のような数値名または人間が読める名前で指定できます。追加のエンジンパラメーターまたはファイル拡張子 (`gz`、`br`、`xz`) に基づいて、圧縮ファイルの読み書きも可能です。

**例:**

```bash theme={null}
$ echo -e "1,2\n3,4" | clickhouse-local -q "CREATE TABLE table (a Int64, b Int64) ENGINE = File(CSV, stdin); SELECT a, b FROM table; DROP TABLE table"
```

<div id="details-of-implementation">
  ## 実装の詳細
</div>

* 複数の `SELECT` クエリは同時実行できますが、`INSERT` クエリは互いの完了を待機します。
* `INSERT` クエリで新しいファイルを作成できます。
* ファイルが存在する場合、`INSERT` はそのファイルに新しいデータを追記します。
* サポートしていません:
  * `ALTER`
  * `SELECT ... SAMPLE`
  * インデックス
  * レプリケーション

<div id="partition-by">
  ## PARTITION BY
</div>

`PARTITION BY` — 省略可能です。データをパーティションキーで分割することで、別々のファイルを作成できます。ほとんどの場合、パーティションキーは必要ありません。必要な場合でも、通常は月単位より細かいパーティションキーは不要です。パーティション化でクエリが高速化されることはありません (`ORDER BY` 式とは異なります) 。細かすぎる粒度でパーティション化するのは避けてください。クライアント識別子や名前でデータをパーティション化しないでください (代わりに、クライアント識別子または名前を `ORDER BY` 式の先頭カラムにしてください) 。

月単位でパーティション化するには、`toYYYYMM(date_column)` 式を使用します。ここで、`date_column` は [Date](/ja/reference/data-types/date) 型の日付カラムです。この場合のパーティション名のフォーマットは `"YYYYMM"` です。

<div id="virtual-columns">
  ## 仮想カラム
</div>

* `_path` — ファイルのパス。型: `LowCardinality(String)`。
* `_file` — ファイル名。型: `LowCardinality(String)`。
* `_size` — ファイルサイズ (バイト単位) 。型: `Nullable(UInt64)`。サイズが不明な場合、値は `NULL` です。
* `_time` — ファイルの最終更新時刻。型: `Nullable(DateTime)`。時刻が不明な場合、値は `NULL` です。

<div id="settings">
  ## 設定
</div>

* [engine\_file\_empty\_if\_not\_exists](/ja/reference/settings/session-settings#engine_file_empty_if_not_exists) - 存在しないファイルから空のデータを選択できるようにします。デフォルトでは無効です。
* [engine\_file\_truncate\_on\_insert](/ja/reference/settings/session-settings#engine_file_truncate_on_insert) - ファイルに insert する前に、そのファイルを切り詰められるようにします。デフォルトでは無効です。
* [engine\_file\_allow\_create\_multiple\_files](/ja/reference/settings/session-settings#engine_file_allow_create_multiple_files) - フォーマットに接尾辞がある場合、insert のたびに新しいファイルを作成できるようにします。デフォルトでは無効です。
* [engine\_file\_skip\_empty\_files](/ja/reference/settings/session-settings#engine_file_skip_empty_files) - 読み取り時に空のファイルをスキップできるようにします。デフォルトでは無効です。
* [storage\_file\_read\_method](/ja/reference/settings/session-settings#engine_file_empty_if_not_exists) - ストレージファイルからデータを読み取る方法です。次のいずれかを指定します: `read`、`pread`、`mmap`。`mmap` メソッドは clickhouse-server には適用されません (clickhouse-local 向けです) 。デフォルト値: clickhouse-server では `pread`、clickhouse-local では `mmap`。
