Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Regexp

入力 出力 エイリアス

説明

Regex フォーマットは、指定された正規表現に基づいて、インポートされたデータの各行を解析します。

使用方法

format_regexp 設定で指定した正規表現が、インポートされたデータの各行に適用されます。正規表現内のサブパターン数は、インポートするデータセットのカラム数と一致している必要があります。

インポートされたデータの各行は、改行文字 '\n' または DOS 形式の改行 "\r\n" で区切られている必要があります。

一致した各サブパターンの内容は、format_regexp_escaping_rule 設定に従って、対応するデータ型のメソッドで解析されます。

正規表現が行に一致せず、かつ format_regexp_skip_unmatched が 1 に設定されている場合、その行は黙ってスキップされます。それ以外の場合は、例外がスローされます。

使用例

data.tsv ファイルについて考えてみましょう。

data.tsvtext
id: 1 array: [1,2,3] string: str1 date: 2020-01-01
id: 2 array: [1,2,3] string: str2 date: 2020-01-02
id: 3 array: [1,2,3] string: str3 date: 2020-01-03

および imp_regex_table テーブル:

Querysql
CREATE TABLE imp_regex_table (id UInt32, array Array(UInt32), string String, date Date) ENGINE = Memory;

次のクエリを使用して、前述のファイルのデータを上記のテーブルに挿入します。

Querybash
$ cat data.tsv | clickhouse-client  --query "INSERT INTO imp_regex_table SETTINGS format_regexp='id: (.+?) array: (.+?) string: (.+?) date: (.+?)', format_regexp_escaping_rule='Escaped', format_regexp_skip_unmatched=0 FORMAT Regexp;"

これで、SELECT を使ってテーブルからデータを取得し、Regex フォーマットがファイル内のデータをどのようにパースしたかを確認できます。

Querysql
SELECT * FROM imp_regex_table;
Responsetext
┌─id─┬─array───┬─string─┬───────date─┐
│  1 │ [1,2,3] │ str1   │ 2020-01-01 │
│  2 │ [1,2,3] │ str2   │ 2020-01-02 │
│  3 │ [1,2,3] │ str3   │ 2020-01-03 │
└────┴─────────┴────────┴────────────┘

フォーマット設定

Regexp フォーマットを使用する場合は、次の設定を利用できます。

  • format_regexpStringre2 フォーマットの正規表現を指定します。

  • format_regexp_escaping_ruleString。次のエスケープ規則をサポートしています。

    • CSV (CSV と同様)
    • JSON (JSONEachRow と同様)
    • Escaped (TSV と同様)
    • Quoted (Values と同様)
    • Raw (サブパターン全体をそのまま抽出します。エスケープ規則はなく、TSVRaw と同様です)
  • format_regexp_skip_unmatchedUInt8format_regexp 式がインポートしたデータに一致しない場合に例外をスローするかどうかを指定します。0 または 1 を設定できます。

Navigation