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

テンプレートと正規表現を使用した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 句を使用してファイルにエクスポートすることもできます。指定された resultset および row フォーマットに基づいてHTMLファイルを生成しましょう:

XMLへのエクスポート

テンプレートフォーマットを使用して、想像できるすべてのテキスト形式ファイルを生成することができます。XMLを含む。関連するテンプレートを配置し、エクスポートを行ってください。

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

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

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

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

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

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

その他の形式

ClickHouseは、さまざまなシナリオやプラットフォームをカバーするために、テキスト形式とバイナリ形式のサポートを導入しています。以下の記事で、さらに多くの形式とその操作方法を探索してください:

また、clickhouse-localを確認してください - ClickHouseサーバーを必要とせずにローカルまたはリモートファイルに作用するための、ポータブルなフル機能のツールです。