MAPREGEXEXTRACTOR

使用正则表达式提取数据,并以 VMap 的形式返回结果。

语法

MAPREGEXEXTRACTOR (record-value [ USING PARAMETERS param=value[,...] ])

参数

record-value
包含要对其应用正则表达式的 JSON 或分隔符格式记录的字符串。

参数

pattern
用于提取所需数据的正则表达式。

默认值: 空字符串 ('')

use_jit
布尔值,在解析正则表达式时使用实时编译。

默认值: false

record_terminator
用于分隔输入记录的字符。

默认值: \n

logline_column
包含与正则表达式相匹配的完整字符串的目标列。

默认值: 空字符串 ('')

示例

这些示例使用以下正则表达式,它们搜索包括 timestampdatethread_namethread_id 字符串的信息。

此示例表达式加载任何 thread_id 十六进制值,无论其是否包含 0x 前缀 (<thread_id>(?:0x)?[0-9a-f]+)

'^(?<time>\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d\.\d+)
 (?<thread_name>[A-Za-z ]+):(?<thread_id>(?:0x)?[0-9a-f]+)
-?(?<transaction_id>[0-9a-f])?(?:[(?<component>\w+)]
\<(?<level>\w+)\> )?(?:<(?<elevel>\w+)> @[?(?<enode>\w+)]?: )
?(?<text>.*)'

为了方便显示,以下示例可能包含换行符。

  1. 创建一个 Flex 表 flogs

    => CREATE FLEX TABLE flogs();
    CREATE TABLE
    
  2. 使用 Flex 表 fregexparser 时,利用 COPY 加载示例日志文件 (vertica.log)。请注意,此示例包括为显示长文本行而添加的行字符。

    => COPY flogs FROM '/home/dbadmin/tempdat/vertica.log' PARSER FREGEXPARSER(pattern='
    ^(?<time>\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d\.\d+) (?<thread_name>[A-Za-z ]+):
    (?<thread_id>(?:0x)?[0-9a-f])-?(?<transaction_id>[0-9a-f])?(?:[(?<component>\w+)]
    \<(?<level>\w+)\> )?(?:<(?<elevel>\w+)> @[?(?<enode>\w+)]?: )?(?<text>.*)');
    Rows Loaded
    -------------
    81399
    (1 row)
    
  3. 用于返回通过正则表达式调用 MAPREGEXEXTRACTOR 的结果。输出以字符串格式返回函数的结果。

    => SELECT MAPTOSTRING(MapregexExtractor(E'2014-04-02 04:02:51.011
    TM Moveout:0x2aab9000f860-a0000000002067 [Txn] <INFO>
    Begin Txn: a0000000002067 \'Moveout: Tuple Mover\'' using PARAMETERS
    pattern=
    '^(?<time>\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d\.\d+)
     (?<thread_name>[A-Za-z ]+):(?<thread_id>(?:0x)?[0-9a-f]+)
    -?(?<transaction_id>[0-9a-f])?(?:[(?<component>\w+)]
    \<(?<level>\w+)\> )?(?:<(?<elevel>\w+)> @[?(?<enode>\w+)]?: )
    ?(?<text>.*)'
    
    )) FROM flogs where __identity__=13;
    maptostring
    --------------------------------------------------------------------------------------------------
    {
    "component" : "Txn",
    "level" : "INFO",
    "text" : "Begin Txn: a0000000002067 'Moveout: Tuple Mover'",
    "thread_id" : "0x2aab9000f860",
    "thread_name" : "TM Moveout",
    "time" : "2014-04-02 04:02:51.011",
    "transaction_id" : "a0000000002067"
    }
    (1 row)
    

另请参阅