メインコンテンツへスキップ
カスタムのテキスト形式データを扱う必要が生じることはよくあります。たとえば、非標準の形式、無効な JSON、壊れた CSV などです。このようなケースでは、CSV や JSON のような標準的なパーサーでは対応できません。しかし、ClickHouse には強力な Template フォーマットと Regex フォーマットがあります。

Template に基づくインポート

次のログファイルからデータをインポートする場合を考えます。
このデータをインポートするには、Template フォーマットを使用できます。入力データの各行について、値のプレースホルダーを含むテンプレート文字列を定義する必要があります。
データのインポート先となるテーブルを作成しましょう。
指定したTemplateを使ってデータをインポートするには、テンプレート文字列をファイルに保存する必要があります (この例では row.template) :
${name:escaping} フォーマットで、カラム名とエスケープ規則を指定します。ここでは CSV、JSON、Escaped、Quoted など複数のオプションを利用でき、それぞれ 対応するエスケープ規則 に従います。 これで、データのインポート時に、指定したファイルを format_template_row 設定オプションの引数として使用できます (なお、template ファイルと data ファイルの末尾に余分な \n 記号を 付けてはいけません) :
データがテーブルに読み込まれたことを確認できます。

空白文字のスキップ

テンプレート内で区切り文字の間にある空白文字をスキップできる TemplateIgnoreSpaces の使用を検討してください:

Templateを使用したデータのエクスポート

Templateを使って、任意のテキスト形式にデータをエクスポートすることもできます。この場合は、2 つのファイルを作成する必要があります。 結果セットテンプレート:結果セット全体のレイアウトを定義します。
ここで、rows_readtime は各リクエストで利用できるシステムメトリクスです。一方、data は生成された行を表します (このファイルでは ${data} が常に最初のプレースホルダーである必要があります) 。これは、行テンプレートファイル で定義されたテンプレートに基づくものです。
それでは、これらのTemplateを使って次のクエリをエクスポートしてみましょう:

HTMLファイルへのエクスポート

Template ベースの結果は、INTO OUTFILE 句を使ってファイルにエクスポートすることもできます。指定された結果セットおよびフォーマットに基づいて、HTML ファイルを生成してみましょう。

XML へのエクスポート

Template フォーマットは、XML を含む、考え得るあらゆるテキスト形式のファイルを生成するために使用できます。適切なテンプレートを用意して、エクスポートするだけです。 メタデータを含む標準的な XML 出力を得るには、XML フォーマットを使用することも検討してください。

正規表現を使ったデータのインポート

Regexp フォーマットは、入力データをより複雑な形で解析する必要がある、より高度なケースに対応しています。今回は error.log のサンプルファイルを解析し、ファイル名とプロトコルも抽出して、それぞれ別のカラムに保存してみましょう。まず、そのための新しいテーブルを用意します。
これで、正規表現を基にデータをインポートできます。
ClickHouse は、各キャプチャグループのデータを、順序に応じて対応するカラムに挿入します。データを確認してみましょう。
デフォルトでは、一致しない行があると ClickHouse はエラーを返します。代わりに一致しない行をスキップするには、format_regexp_skip_unmatched オプションを有効にしてください。

その他のフォーマット

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