BigQuery 值拆分

Posted

技术标签:

【中文标题】BigQuery 值拆分【英文标题】:BigQuery Value Splitting 【发布时间】:2021-08-22 12:55:09 【问题描述】:

我正在尝试将日志数据分离/提取到列中。 我尝试使用“空格”作为分隔符,但值之间也有空格。 我也尝试使用正则表达式,但由于值中的“空格”而遇到困难。

由于是不同键值的日志数据,我想避免硬编码键,即:rt、shost、src...

部分样本数据:

rt=Aug 19 2021 00:00:02 UTC+00:00 shost=dns.google src=8.8.8.8

BigQuery 脚本来拆分数据,所以我可以使用 SAFE_OFFSET 来获取数组:

SELECT split(details, ' ') FROM (SELECT 'rt=Aug 19 2021 00:00:02 UTC+00:00 shost=dns.google src=8.8.8.8' details)

BigQuery 脚本 regexp_extract:

SELECT regexp_extract_all(details, r'[\w=.:]*') FROM (SELECT 'rt=2021 年 8 月 19 日 00:00:02 UTC+00:00 shost=dns.google src=8.8.8.8'详情)

我想不出任何其他方法来解决这个问题,并且很乐意接受任何建议。

【问题讨论】:

【参考方案1】:

用特殊字符标记新的日志参数怎么样?然后分裂在这些。由于我不知道您的数据输入,特殊字符在这里是@<*>@,它不应该出现在任何日志中。

SELECT
  split(REGEXP_replace(details, r' (\w*=)',r'@<*>@\1'),'@<*>@')
FROM (
  SELECT
    'rt=Aug 19 2021 00:00:02 UTC+00:00 shost=dns.google src=8.8.8.8' details)

【讨论】:

以上是关于BigQuery 值拆分的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 BigQuery 中取消嵌套数组,以便将嵌套数据按键值拆分为列?

BigQuery 将“字节”列拆分为行

BigQuery - 同时运行计数和拆分功能

Bigquery SQL 中的拆分函数

BigQuery拆分列并获取每个子字符串的计数[重复]

Bigquery 导出拆分为多个文件,其中包含一些空文件