在 Snowflake 中,如何将带有多个分隔符的日志文本数据解析为多列?

问题描述 投票:0回答:1

在 Snowflake 中,如何将带有多个分隔符的日志文本数据解析为多列?

日志文本数据示例:

Joe_Smith 08:29:39 请求日期:04/30/2024 -> 05/02/2024 更改日期:04/30/2024 -> 05/01/2024

我迷失了方向,不知道该怎么办。

sql snowflake-cloud-data-platform
1个回答
0
投票

要实现此目的,您必须结合使用字符串函数和正则表达式,并使用模式来匹配日志文本数据的结构。使用 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 也替换为列名称。

© www.soinside.com 2019 - 2024. All rights reserved.