Перейти к основному содержимому
Перейти к основному содержимому

Regexp

InputOutputAlias

Описание

Формат Regex разбирает каждую строку импортируемых данных в соответствии с предоставленным регулярным выражением.

Использование

Регулярное выражение из настройки format_regexp применяется к каждой строке импортируемых данных. Число подвыражений в регулярном выражении должно быть равно количеству колонок в импортируемом наборе данных.

Строки импортируемых данных должны быть разделены символом новой строки '\n' или новой строкой в стиле DOS "\r\n".

Содержимое каждого совпадающего подвыражения разбирается с помощью метода соответствующего типа данных, в соответствии с настройкой format_regexp_escaping_rule.

Если регулярное выражение не совпадает со строкой, а format_regexp_skip_unmatched установлено в 1, строка будет тихо пропущена. В противном случае будет выброшено исключение.

Пример использования

Рассмотрим файл data.tsv:

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:

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

Мы вставим данные из вышеупомянутого файла в таблицу с помощью следующего запроса:

$ 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 разобрал данные из файла:

SELECT * FROM imp_regex_table;
┌─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_regexpСтрока. Содержит регулярное выражение в формате re2.

  • format_regexp_escaping_ruleСтрока. Поддерживаются следующие правила экранирования:

    • CSV (аналогично CSV)
    • JSON (аналогично JSONEachRow)
    • Escaped (аналогично TSV)
    • Quoted (аналогично Values)
    • Raw (извлекает подвыражения как целое, без правил экранирования, аналогично TSVRaw)
  • format_regexp_skip_unmatchedUInt8. Определяет необходимость выбрасывать исключение в случае, если выражение format_regexp не совпадает с импортируемыми данными. Может быть установлено в 0 или 1.