跳至主要內容

...大约 6 分钟

字符串处理

RegexMatch

函数简介

本函数用于正则表达式匹配文本中的具体内容并返回。

函数名: REGEXMATCH

输入序列: 仅支持单个输入序列,类型为 TEXT。

参数:

  • regex: 匹配的正则表达式,支持所有 Java 正则表达式语法,比如\d+\.\d+\.\d+\.\d+将会匹配任意 IPv4 地址.
  • group: 输出的匹配组序号,根据 java.util.regex 规定,第 0 组为整个正则表达式,此后的组按照左括号出现的顺序依次编号。
    A(B(CD))中共有三个组,第 0 组A(B(CD)),第 1 组B(CD)和第 2 组CD

输出序列: 输出单个序列,类型为 TEXT。

提示: 空值或无法匹配给定的正则表达式的数据点没有输出结果。

使用示例

输入序列:

+-----------------------------+-------------------------------+
|                         Time|                root.test.d1.s1|
+-----------------------------+-------------------------------+
|2021-01-01T00:00:01.000+08:00|        [192.168.0.1] [SUCCESS]|
|2021-01-01T00:00:02.000+08:00|       [192.168.0.24] [SUCCESS]|
|2021-01-01T00:00:03.000+08:00|           [192.168.0.2] [FAIL]|
|2021-01-01T00:00:04.000+08:00|        [192.168.0.5] [SUCCESS]|
|2021-01-01T00:00:05.000+08:00|      [192.168.0.124] [SUCCESS]|
+-----------------------------+-------------------------------+

用于查询的 SQL 语句:

select regexmatch(s1, "regex"="\d+\.\d+\.\d+\.\d+", "group"="0") from root.test.d1

输出序列:

+-----------------------------+----------------------------------------------------------------------+
|                         Time|regexmatch(root.test.d1.s1, "regex"="\d+\.\d+\.\d+\.\d+", "group"="0")|
+-----------------------------+----------------------------------------------------------------------+
|2021-01-01T00:00:01.000+08:00|                                                           192.168.0.1|
|2021-01-01T00:00:02.000+08:00|                                                          192.168.0.24|
|2021-01-01T00:00:03.000+08:00|                                                           192.168.0.2|
|2021-01-01T00:00:04.000+08:00|                                                           192.168.0.5|
|2021-01-01T00:00:05.000+08:00|                                                         192.168.0.124|
+-----------------------------+----------------------------------------------------------------------+

RegexReplace

函数简介

本函数用于将文本中符合正则表达式的匹配结果替换为指定的字符串。

函数名: REGEXREPLACE

输入序列: 仅支持单个输入序列,类型为 TEXT。

参数:

  • regex: 需要替换的正则表达式,支持所有 Java 正则表达式语法。
  • replace: 替换后的字符串,支持 Java 正则表达式中的后向引用,
    形如'$1'指代了正则表达式regex中的第一个分组,并会在替换时自动填充匹配到的子串。
  • limit: 替换次数,大于等于 -1 的整数,默认为 -1 表示所有匹配的子串都会被替换。
  • offset: 需要跳过的匹配次数,即前offset次匹配到的字符子串并不会被替换,默认为 0。
  • reverse: 是否需要反向计数,默认为 false 即按照从左向右的次序。

输出序列: 输出单个序列,类型为 TEXT。

使用示例

输入序列:

+-----------------------------+-------------------------------+
|                         Time|                root.test.d1.s1|
+-----------------------------+-------------------------------+
|2021-01-01T00:00:01.000+08:00|        [192.168.0.1] [SUCCESS]|
|2021-01-01T00:00:02.000+08:00|       [192.168.0.24] [SUCCESS]|
|2021-01-01T00:00:03.000+08:00|           [192.168.0.2] [FAIL]|
|2021-01-01T00:00:04.000+08:00|        [192.168.0.5] [SUCCESS]|
|2021-01-01T00:00:05.000+08:00|      [192.168.0.124] [SUCCESS]|
+-----------------------------+-------------------------------+

用于查询的 SQL 语句:

select regexreplace(s1, "regex"="192\.168\.0\.(\d+)", "replace"="cluster-$1", "limit"="1") from root.test.d1

输出序列:

+-----------------------------+-----------------------------------------------------------+
|                         Time|regexreplace(root.test.d1.s1, "regex"="192\.168\.0\.(\d+)",|
|                             |                       "replace"="cluster-$1", "limit"="1")|
+-----------------------------+-----------------------------------------------------------+
|2021-01-01T00:00:01.000+08:00|                                      [cluster-1] [SUCCESS]|
|2021-01-01T00:00:02.000+08:00|                                     [cluster-24] [SUCCESS]|
|2021-01-01T00:00:03.000+08:00|                                         [cluster-2] [FAIL]|
|2021-01-01T00:00:04.000+08:00|                                      [cluster-5] [SUCCESS]|
|2021-01-01T00:00:05.000+08:00|                                    [cluster-124] [SUCCESS]|
+-----------------------------+-----------------------------------------------------------+

RegexSplit

函数简介

本函数用于使用给定的正则表达式切分文本,并返回指定的项。

函数名: REGEXSPLIT

输入序列: 仅支持单个输入序列,类型为 TEXT。

参数:

  • regex: 用于分割文本的正则表达式,支持所有 Java 正则表达式语法,比如['"]将会匹配任意的英文引号'"
  • index: 输出结果在切分后数组中的序号,需要是大于等于 -1 的整数,默认值为 -1 表示返回切分后数组的长度,其它非负整数即表示返回数组中对应位置的切分结果(数组的秩从 0 开始计数)。

输出序列: 输出单个序列,在index为 -1 时输出数据类型为 INT32,否则为 TEXT。

提示: 如果index超出了切分后结果数组的秩范围,例如使用,切分0,1,2时输入index为 3,则该数据点没有输出结果。

使用示例

输入序列:

+-----------------------------+---------------+
|                         Time|root.test.d1.s1|
+-----------------------------+---------------+
|2021-01-01T00:00:01.000+08:00|      A,B,A+,B-|
|2021-01-01T00:00:02.000+08:00|      A,A+,A,B+|
|2021-01-01T00:00:03.000+08:00|         B+,B,B|
|2021-01-01T00:00:04.000+08:00|      A+,A,A+,A|
|2021-01-01T00:00:05.000+08:00|       A,B-,B,B|
+-----------------------------+---------------+

用于查询的 SQL 语句:

select regexsplit(s1, "regex"=",", "index"="-1") from root.test.d1

输出序列:

+-----------------------------+------------------------------------------------------+
|                         Time|regexsplit(root.test.d1.s1, "regex"=",", "index"="-1")|
+-----------------------------+------------------------------------------------------+
|2021-01-01T00:00:01.000+08:00|                                                     4|
|2021-01-01T00:00:02.000+08:00|                                                     4|
|2021-01-01T00:00:03.000+08:00|                                                     3|
|2021-01-01T00:00:04.000+08:00|                                                     4|
|2021-01-01T00:00:05.000+08:00|                                                     4|
+-----------------------------+------------------------------------------------------+

另一个查询的 SQL 语句:

select regexsplit(s1, "regex"=",", "index"="3") from root.test.d1

输出序列:

+-----------------------------+-----------------------------------------------------+
|                         Time|regexsplit(root.test.d1.s1, "regex"=",", "index"="3")|
+-----------------------------+-----------------------------------------------------+
|2021-01-01T00:00:01.000+08:00|                                                   B-|
|2021-01-01T00:00:02.000+08:00|                                                   B+|
|2021-01-01T00:00:04.000+08:00|                                                    A|
|2021-01-01T00:00:05.000+08:00|                                                    B|
+-----------------------------+-----------------------------------------------------+

StrReplace

函数简介

本函数用于将文本中的子串替换为指定的字符串。

函数名: STRREPLACE

输入序列: 仅支持单个输入序列,类型为 TEXT。

参数:

  • target: 需要替换的字符子串
  • replace: 替换后的字符串。
  • limit: 替换次数,大于等于 -1 的整数,默认为 -1 表示所有匹配的子串都会被替换。
  • offset: 需要跳过的匹配次数,即前offset次匹配到的字符子串并不会被替换,默认为 0。
  • reverse: 是否需要反向计数,默认为 false 即按照从左向右的次序。

输出序列: 输出单个序列,类型为 TEXT。

使用示例

输入序列:

+-----------------------------+---------------+
|                         Time|root.test.d1.s1|
+-----------------------------+---------------+
|2021-01-01T00:00:01.000+08:00|      A,B,A+,B-|
|2021-01-01T00:00:02.000+08:00|      A,A+,A,B+|
|2021-01-01T00:00:03.000+08:00|         B+,B,B|
|2021-01-01T00:00:04.000+08:00|      A+,A,A+,A|
|2021-01-01T00:00:05.000+08:00|       A,B-,B,B|
+-----------------------------+---------------+

用于查询的 SQL 语句:

select strreplace(s1, "target"=",", "replace"="/", "limit"="2") from root.test.d1

输出序列:

+-----------------------------+-----------------------------------------+
|                         Time|strreplace(root.test.d1.s1, "target"=",",|
|                             |              "replace"="/", "limit"="2")|
+-----------------------------+-----------------------------------------+
|2021-01-01T00:00:01.000+08:00|                                A/B/A+,B-|
|2021-01-01T00:00:02.000+08:00|                                A/A+/A,B+|
|2021-01-01T00:00:03.000+08:00|                                   B+/B/B|
|2021-01-01T00:00:04.000+08:00|                                A+/A/A+,A|
|2021-01-01T00:00:05.000+08:00|                                 A/B-/B,B|
+-----------------------------+-----------------------------------------+

另一个用于查询的 SQL 语句:

select strreplace(s1, "target"=",", "replace"="/", "limit"="1", "offset"="1", "reverse"="true") from root.test.d1

输出序列:

+-----------------------------+-----------------------------------------------------+
|                         Time|strreplace(root.test.d1.s1, "target"=",", "replace"= | 
|                             |    "|", "limit"="1", "offset"="1", "reverse"="true")|
+-----------------------------+-----------------------------------------------------+
|2021-01-01T00:00:01.000+08:00|                                            A,B/A+,B-|
|2021-01-01T00:00:02.000+08:00|                                            A,A+/A,B+|
|2021-01-01T00:00:03.000+08:00|                                               B+/B,B|
|2021-01-01T00:00:04.000+08:00|                                            A+,A/A+,A|
|2021-01-01T00:00:05.000+08:00|                                             A,B-/B,B|
+-----------------------------+-----------------------------------------------------+

Copyright © 2024 The Apache Software Foundation.
Apache and the Apache feather logo are trademarks of The Apache Software Foundation

Have a question? Connect with us on QQ, WeChat, or Slack. Join the community now.