メインコンテンツへスキップ
ClickHouseは、CSVのインポートおよびエクスポートをサポートしています。CSVファイルは、ヘッダー行、独自の区切り文字、エスケープ記号など、フォーマットの仕様がさまざまであるため、ClickHouseではそれぞれのケースに効率よく対応できる各種フォーマットと設定を提供しています。

CSVファイルからデータをインポートする

データをインポートする前に、適切な構造のテーブルを作成しましょう。
CSVファイルからsometableテーブルにデータをインポートするには、ファイルを直接clickhouse-clientにパイプします。
ClickHouse に CSV 形式のデータを取り込むことを知らせるために、FORMAT CSV を使用している点に注意してください。別の方法として、FROM INFILE 句を使用して、ローカルファイルからデータを読み込むこともできます。
ここでは、ClickHouse にファイルのフォーマットを認識させるために、FORMAT CSV 句を使用します。また、url() 関数を使って URL から直接データを読み込んだり、s3() 関数を使って S3 ファイルから読み込んだりすることもできます。
file() および INFILE/OUTFILE では、明示的にフォーマットを指定しなくてもかまいません。 その場合、ClickHouse はファイル拡張子に基づいてフォーマットを自動的に検出します。

ヘッダー付きCSVファイル

このCSVファイルにはヘッダーが含まれています:
このファイルからデータをインポートするには、CSVWithNamesフォーマットを使用します。
この場合、ClickHouse はファイルからデータをインポートする際に、最初の行をスキップします。
version 23.1 以降、CSV フォーマットを使用すると、ClickHouse は CSV ファイルのヘッダーを自動的に検出するため、CSVWithNamesCSVWithNamesAndTypes を使用する必要はありません。

カスタム区切り文字を使用したCSVファイル

CSVファイルでコンマ以外の区切り文字を使用している場合は、format_csv_delimiter オプションを使って、該当する記号を設定できます。
これで、CSVファイルからインポートする際は、区切り文字としてカンマではなく ; が使用されます。

CSVファイル内の行をスキップする

CSVファイルからデータをインポートする際、先頭の数行をスキップしたい場合があります。これは、input_format_csv_skip_first_lines オプションを使用して行えます。
この場合、CSVファイルの先頭10行をスキップします。
このfileには 1k 行ありますが、最初の 10 行をスキップするよう指定したため、ClickHouse が読み込んだのは 990 行のみです。
file() 関数を使用する場合、ClickHouse Cloud では、ファイルが存在するマシン上で clickhouse client を使ってコマンドを実行する必要があります。別の方法として、clickhouse-local を使用してローカルでファイルを確認することもできます。

CSV ファイルでの NULL 値の扱い

NULL 値の表現方法は、そのファイルを生成したアプリケーションによって異なる場合があります。デフォルトでは、ClickHouse は CSV で NULL 値として \N を使用します。ただし、これは format_csv_null_representation オプションで変更できます。 次のような CSV ファイルがあるとします。
このファイルからデータを読み込むと、ClickHouse は Nothing を String として扱います (これは正しい挙動です) :
ClickHouse で NothingNULL として扱う場合は、次のオプションで指定できます。
これで、期待どおりの箇所に NULL が入っていることが確認できます:

TSV (タブ区切り) ファイル

タブ区切りのデータフォーマットは、データ交換用フォーマットとして広く使われています。TSV file から ClickHouse にデータを読み込むには、TabSeparated フォーマットを使用します。
ヘッダー付きの TSV ファイルを扱うための TabSeparatedWithNames フォーマットもあります。また、CSV と同様に、input_format_tsv_skip_first_lines オプションを使って先頭の X 行をスキップできます。

Raw TSV

TSVファイルは、タブや改行がエスケープされないまま保存されていることがあります。そのようなファイルを扱うには、TabSeparatedRaw を使用します。

CSV へのエクスポート

前の例で使用したフォーマットは、いずれもデータのエクスポートにも使用できます。テーブル (またはクエリ) からデータを CSV フォーマットでエクスポートするには、同じ FORMAT 句を使用します。
CSVファイルにヘッダーを追加するには、CSVWithNamesフォーマットを使用します。

エクスポートしたデータをCSVファイルに保存する

エクスポートしたデータをファイルに保存するには、INTO…OUTFILE 句を使用できます。
ClickHouse が 36m 行を CSVファイルに保存するのに 約1 秒しかかからなかったことに注目してください。

カスタム区切り文字を使用したCSVのエクスポート

コンマ以外の区切り文字を使用する場合は、format_csv_delimiter 設定オプションを使用できます。
これで、ClickHouse は CSV フォーマット の区切り文字として | を使用するようになります:

Windows向けのCSVのエクスポート

CSVファイルをWindows環境で問題なく使えるようにするには、output_format_csv_crlf_end_of_line オプションを有効にすることを検討してください。これにより、改行コードとして \n ではなく \r\n が使用されます。

CSVファイルのスキーマ推論

未知のCSVファイルを扱うことはよくあるため、カラムにどの型を使うべきかを確認する必要があります。ClickHouse はデフォルトで、指定されたCSVファイルを解析し、データのフォーマットを推測しようとします。これは “スキーマ推論” と呼ばれます。検出されたデータ型は、file() 関数と組み合わせて DESCRIBE ステートメントを使用することで確認できます。
ここでは、ClickHouse が CSVファイルのカラム型を効率よく推測できます。ClickHouse に推測させたくない場合は、次のオプションで無効にできます。
この場合、すべてのカラム型は String 型として扱われます。

明示的にカラム型を指定した CSV のエクスポートとインポート

ClickHouse では、CSVWithNamesAndTypes (およびその他の *WithNames フォーマットファミリー) を使用してデータをエクスポートする際に、カラム型を明示的に指定することもできます。
このフォーマットには、2 つのヘッダー行が含まれます。1 つはカラム名、もう 1 つはカラムの型です。これにより、ClickHouse (および他のアプリケーション) は、このようなファイル からデータを読み込む際にカラムの型を識別できます。
これにより ClickHouse は、推測する代わりに (2 行目の) ヘッダー行に基づいてカラムの型を判別するようになりました。

カスタムの区切り文字、セパレーター、エスケープルール

複雑なケースでは、テキストデータが高度にカスタマイズされた形式であっても、一定の構造を持っていることがあります。ClickHouse には、そのようなケース向けに特別な CustomSeparated フォーマットがあり、カスタムのエスケープルール、区切り文字、行セパレーター、開始/終了記号を設定できます。 たとえば、ファイルに次のようなデータがあるとします。
個々の行が row() で囲まれ、行は , で区切られ、各値は ; で区切られていることがわかります。この場合、このファイルからデータを読み込むには次の設定を使用できます。
これで、独自フォーマットのファイルからデータを読み込めます。
CustomSeparatedWithNames を使用すると、ヘッダーを正しくエクスポートおよびインポートできます。さらに複雑なケースに対処するには、regex and template フォーマットも参照してください。

大容量のCSVファイルの操作

CSVファイルは大きくなることがありますが、ClickHouse はどのようなサイズのファイルでも効率よく処理できます。大容量ファイルは通常圧縮された状態で提供されますが、ClickHouse では処理前に展開する必要はありません。insert時に COMPRESSION 句を使用できます。
COMPRESSION 句を省略しても、ClickHouse はファイルの拡張子に基づいて圧縮形式を推定しようとします。同じ方法で、ファイルを圧縮フォーマットに直接エクスポートすることもできます。
これにより、圧縮済みのdata_csv.csv.gzファイルが作成されます。

その他のフォーマット

ClickHouse は、さまざまなシナリオやプラットフォームに対応するため、テキスト形式とバイナリ形式の両方を含む多数のフォーマットをサポートしています。さらに多くのフォーマットとその活用方法については、以下の記事を参照してください。 あわせて、clickhouse-local もご確認ください。これは、ClickHouse server を必要とせずにローカル/リモートファイルを扱える、移植性の高い高機能ツールです。
最終更新日 2026年6月29日