ClickHouseでのテンプレートと正規表現を使用したカスタムテキストデータのインポートとエクスポート
私たちはしばしばカスタムテキストフォーマットのデータを扱う必要があります。これは、非標準フォーマット、無効なJSON、または壊れたCSVかもしれません。CSVやJSONのような標準パーサーはすべてのケースで機能しないかもしれません。しかし、ClickHouseはここで強力なテンプレートと正規表現フォーマットで私たちをサポートしてくれます。
テンプレートに基づくインポート
以下のログファイルからデータをインポートしたいと仮定しましょう。
このデータをインポートするためにテンプレートフォーマットを使用できます。入力データの各行の値プレースホルダーを持つテンプレート文字列を定義する必要があります:
データをインポートするためのテーブルを作成しましょう:
指定されたテンプレートを使用してデータをインポートするには、テンプレート文字列をファイルに保存する必要があります(この場合はrow.template):
ここでは、カラム名とエスケープ規則を${name:escaping}
フォーマットで定義します。この部分では、CSV、JSON、Escaped、Quotedなどの複数のオプションが利用可能で、それぞれのエスケープルールを実装します。
これで、データをインポートする際に、format_template_row
設定オプションの引数としてこのファイルを使用できます(注意、テンプレートとデータファイルには 余分な \n
シンボルがファイルの末尾にあってはいけません):
そして、データがテーブルにロードされていることを確認できます:
ホワイトスペースをスキップ
テンプレートの区切り文字の間のホワイトスペースをスキップできるTemplateIgnoreSpacesを使用することを検討してください:
テンプレートを使用したデータのエクスポート
私たちはまた、テンプレートを使用して任意のテキスト形式にデータをエクスポートすることもできます。この場合、2つのファイルを作成する必要があります:
結果セットテンプレートは、全体の結果セットのレイアウトを定義します:
ここで、rows_read
とtime
は、各リクエストに対して利用可能なシステムメトリックです。data
は生成された行を示し(${data}
はこのファイルの最初のプレースホルダーとして常に来るべきです)、行テンプレートファイルに定義されたテンプレートに基づいています:
これらのテンプレートを使用して、次のクエリをエクスポートしましょう:
HTMLファイルへのエクスポート
テンプレートベースの結果は、INTO OUTFILE
句を使用してファイルにエクスポートすることもできます。指定された結果セットと行フォーマットに基づいてHTMLファイルを生成してみましょう:
XMLへのエクスポート
テンプレートフォーマットは、XMLを含むあらゆる想像可能なテキストフォーマットファイルを生成するために使用できます。適切なテンプレートを配置してエクスポートを行ってください。
さらに、メタデータを含む標準XML結果を取得するためにXMLフォーマットの使用を検討してください:
正規表現に基づくデータのインポート
Regexpフォーマットは、入力データがより複雑な方法で解析する必要がある場合に対処します。今回は、ファイル名とプロトコルをキャプチャして、それらを別々のカラムに保存するために私たちのerror.log例ファイルを解析しましょう。まず、新しいテーブルを準備しましょう:
次に、正規表現に基づいてデータをインポートできます:
ClickHouseは、各キャプチャグループからその順序に基づいて関連するカラムにデータを挿入します。データを確認してみましょう:
デフォルトでは、ClickHouseは不一致の行がある場合にエラーを発生させます。不一致の行をスキップしたい場合は、format_regexp_skip_unmatchedオプションを使って有効にできます:
その他のフォーマット
ClickHouseは、さまざまなシナリオやプラットフォームをカバーするために、多くのフォーマット(テキストおよびバイナリ)のサポートを導入しています。以下の記事で、他のフォーマットやそれらとの作業方法を探ってみてください:
- CSVおよびTSVフォーマット
- Parquet
- JSONフォーマット
- 正規表現とテンプレート
- ネイティブおよびバイナリフォーマット
- SQLフォーマット
また、clickhouse-localをチェックしてみてください。これは、Clickhouseサーバーを必要とせずにローカル/リモートファイルを扱うためのポータブルなフル機能ツールです。