メインコンテンツまでスキップ
メインコンテンツまでスキップ

ClickHouseでのテンプレートと正規表現を使用したカスタムテキストデータのインポートとエクスポート

私たちはしばしばカスタムテキストフォーマットのデータを扱う必要があります。これは、非標準フォーマット、無効なJSON、または壊れたCSVかもしれません。CSVやJSONのような標準パーサーはすべてのケースで機能しないかもしれません。しかし、ClickHouseはここで強力なテンプレートと正規表現フォーマットで私たちをサポートしてくれます。

テンプレートに基づくインポート

以下のログファイルからデータをインポートしたいと仮定しましょう。

このデータをインポートするためにテンプレートフォーマットを使用できます。入力データの各行の値プレースホルダーを持つテンプレート文字列を定義する必要があります:

データをインポートするためのテーブルを作成しましょう:

指定されたテンプレートを使用してデータをインポートするには、テンプレート文字列をファイルに保存する必要があります(この場合はrow.template):

ここでは、カラム名とエスケープ規則を${name:escaping}フォーマットで定義します。この部分では、CSV、JSON、Escaped、Quotedなどの複数のオプションが利用可能で、それぞれのエスケープルールを実装します。

これで、データをインポートする際に、format_template_row設定オプションの引数としてこのファイルを使用できます(注意、テンプレートとデータファイルには 余分な \n シンボルがファイルの末尾にあってはいけません):

そして、データがテーブルにロードされていることを確認できます:

ホワイトスペースをスキップ

テンプレートの区切り文字の間のホワイトスペースをスキップできるTemplateIgnoreSpacesを使用することを検討してください:

テンプレートを使用したデータのエクスポート

私たちはまた、テンプレートを使用して任意のテキスト形式にデータをエクスポートすることもできます。この場合、2つのファイルを作成する必要があります:

結果セットテンプレートは、全体の結果セットのレイアウトを定義します:

ここで、rows_readtimeは、各リクエストに対して利用可能なシステムメトリックです。dataは生成された行を示し(${data} はこのファイルの最初のプレースホルダーとして常に来るべきです)、行テンプレートファイルに定義されたテンプレートに基づいています:

これらのテンプレートを使用して、次のクエリをエクスポートしましょう:

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

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

XMLへのエクスポート

テンプレートフォーマットは、XMLを含むあらゆる想像可能なテキストフォーマットファイルを生成するために使用できます。適切なテンプレートを配置してエクスポートを行ってください。

さらに、メタデータを含む標準XML結果を取得するためにXMLフォーマットの使用を検討してください:

正規表現に基づくデータのインポート

Regexpフォーマットは、入力データがより複雑な方法で解析する必要がある場合に対処します。今回は、ファイル名とプロトコルをキャプチャして、それらを別々のカラムに保存するために私たちのerror.log例ファイルを解析しましょう。まず、新しいテーブルを準備しましょう:

次に、正規表現に基づいてデータをインポートできます:

ClickHouseは、各キャプチャグループからその順序に基づいて関連するカラムにデータを挿入します。データを確認してみましょう:

デフォルトでは、ClickHouseは不一致の行がある場合にエラーを発生させます。不一致の行をスキップしたい場合は、format_regexp_skip_unmatchedオプションを使って有効にできます:

その他のフォーマット

ClickHouseは、さまざまなシナリオやプラットフォームをカバーするために、多くのフォーマット(テキストおよびバイナリ)のサポートを導入しています。以下の記事で、他のフォーマットやそれらとの作業方法を探ってみてください:

また、clickhouse-localをチェックしてみてください。これは、Clickhouseサーバーを必要とせずにローカル/リモートファイルを扱うためのポータブルなフル機能ツールです。