跳到主要内容
跳到主要内容

Regexp

输入输出别名

描述

Regex 格式根据提供的正则表达式解析导入数据的每一行。

用法

来自 format_regexp 设置的正则表达式应用于导入数据的每一行。正则表达式中子模式的数量必须等于导入数据集中列的数量。

导入数据的行必须以换行符 '\n' 或 DOS 样式换行符 "\r\n" 分隔。

每个匹配的子模式的内容都将根据 format_regexp_escaping_rule 设置,使用相应数据类型的方法进行解析。

如果正则表达式与行不匹配,并且 format_regexp_skip_unmatched 设置为 1,则该行将被静默跳过。否则,将抛出异常。

用法示例

考虑文件 data.tsv

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
    • 转义(类似于 TSV
    • 引用(类似于 Values
    • 原始(将子模式作为一个整体提取,没有转义规则,类似于 TSVRaw
  • format_regexp_skip_unmatchedUInt8。定义在 format_regexp 表达式与导入数据不匹配的情况下是否需要抛出异常。可以设置为 01