在 Snowflake 中,如何将带有多个分隔符的日志文本数据解析为多列?
日志文本数据示例:
Joe_Smith 08:29:39 请求日期:04/30/2024 -> 05/02/2024 更改日期:04/30/2024 -> 05/01/2024
我迷失了方向,不知道该怎么办。
要实现此目的,您必须结合使用字符串函数和正则表达式,并使用模式来匹配日志文本数据的结构。使用 REGEXP_SUBSTR 函数提取与正则表达式模式匹配的子字符串。
要解析多列中的数据,这是我通常所做的,使用您的示例:
选择 REGEXP_SUBSTR(log_text, '([^ ]+)', 1, 1) AS 用户名, REGEXP_SUBSTR(log_text, '(\d{2}:\d{2}:\d{2})', 1, 1) AS 时间, REGEXP_SUBSTR(log_text, '请求日期: (\d{2}/\d{2}/\d{4}) -> (\d{2}/\d{2}/\d{4})', 1 , 1) AS request_start_date, REGEXP_SUBSTR(log_text, '请求日期: (\d{2}/\d{2}/\d{4}) -> (\d{2}/\d{2}/\d{4})', 1 , 2) AS 请求结束日期, REGEXP_SUBSTR(log_text, '更改日期: (\d{2}/\d{2}/\d{4}) -> (\d{2}/\d{2}/\d{4})', 1 , 1) AS 更改_开始_日期, REGEXP_SUBSTR(log_text, '更改日期: (\d{2}/\d{2}/\d{4}) -> (\d{2}/\d{2}/\d{4})', 1 , 2) AS 更改结束日期 FROM your_table(插入表名称);
确保将 log_text 也替换为列名称。