gpt4 book ai didi

sql - BigQuery 查询嵌套的 json

转载 作者:行者123 更新时间:2023-12-05 08:55:33 33 4
gpt4 key购买 nike

我有以字符串形式保存在 BigQuery 中的 JSON 数据。

{
"event":{
"action":"prohibitedSoftwareCheckResult",
"clientTime":"2017-07-16T12:55:40.828Z",
"clientTimeZone":"3",
"serverTime":"2017-07-16T12:55:39.000Z",
"processList":{
"1":"outlook.exe",
"2":"notepad.exe"
}
},
"user":{
"id":123456,

}
}

我想要一个结果集,其中每个进程都在不同的行中。像这样的东西:

UserID        ProcessName
-------------------------
123456 outlook.exe
123456 notepad.exe

我看到有一个选项可以查询重复数据,但根据我的理解,该字段需要是 RECORD 类型。

是否可以在子查询中“即时”转换为 RECORD 类型? (我无法将源字段更改为 RECORD)。

或者,是否有不同的方法来返回所需的结果集?

最佳答案

这可能是您的解决方法:

SELECT
user_id,
processListValues
FROM(
SELECT
JSON_EXTRACT_SCALAR(json_data, '$.user.id') user_id,
REGEXP_EXTRACT_ALL(JSON_EXTRACT(json_data, '$.event.processList'), r':"([a-zA-Z0-9\.]+)"') processListValues
FROM data
),
UNNEST(processListValues) processListValues

以您的 JSON 为例:

WITH data AS(
SELECT """{
"event":{
"action":"prohibitedSoftwareCheckResult",
"clientTime":"2017-07-16T12:55:40.828Z",
"clientTimeZone":"3",
"serverTime":"2017-07-16T12:55:39.000Z",
"processList":{
"1":"outlook.exe",
"2":"notepad.exe",
"3":"outlo3245345okexe"
}
},
"user":{
"id":123456,

}
}""" as json_data
)

SELECT
user_id,
processListValues
FROM(
SELECT
JSON_EXTRACT_SCALAR(json_data, '$.user.id') user_id,
REGEXP_EXTRACT_ALL(JSON_EXTRACT(json_data, '$.event.processList'), r':"([a-zA-Z0-9\.]+)"') processListValues
FROM data
),
UNNEST(processListValues) processListValues

结果:

Row user_id processListValues    
1 123456 outlook.exe
2 123456 notepad.exe
3 123456 outlo3245345okexe

关于sql - BigQuery 查询嵌套的 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45585201/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com