google-bigquery - 在解析 JSON 字符串数据时无法使用 Struct 或 Unnest
问题描述
我很难以列格式解析来自 BigQuery 的数据以进行分析,非常感谢您的帮助。
我有具有以下架构的 user_detail 表
字段名称 | 类型 | 模式 | 描述 |
---|---|---|---|
用户身份 | 整数 | 可空的 | |
用户名 | 细绳 | 可空的 | {"dl":"512"} |
我在此表中有以下示例数据
用户身份 | 用户名 |
---|---|
12829 | [{"_id":{"$oid":"5d650676af82eb0a30737e74"},"_type":"UserName","capture_date":{"$date":"2019-08-27T00:00:00.000+0000"}, "source":"google","name1":"John","name3":"Doe","name4":"D/O Jane Doe","gender":"1","dob":{" $日期":"1986-07-10T00:00:00.000+0000"}}] |
我想以以下表格格式获取数据
选择用户 ID、来源、名称 1、名称 3
我尝试过 unnest 运算符,但显然因为 user_names 列是字符串格式,我无法得到它,因为它不是数组格式(FROM 子句中引用的值必须是数组。user_names 在 [5:10] 处具有类型 STRING)
你能帮我怎么做吗?
解决方案
以下查询是有关如何执行此操作的示例:
with cte as (
select 12829 as user_id, '[{"_id":{"$oid":"5d650676af82eb0a30737e74"},"_type":"UserName","capture_date":{"$date":"2019-08-27T00:00:00.000+0000"},"source":"google","name1":"John","name3":"Doe","name4":"D/O Jane Doe","gender":"1","dob":{"$date":"1986-07-10T00:00:00.000+0000"}}]' as json_line
)
select
user_id,
json_value(json_line, '$[0].source') as source,
json_value(json_line, '$[0].name1') as name1,
json_value(json_line, '$[0].name3') as name3
from cte
您必须使用$[0].ATTRIBUTE_NAME
,因为您的 JSON 字符串是字典列表,因此您必须选择要解析的元素,在这种情况下是第一个。
如果您没有列表中的方括号,您可以使用$.ATTRIBUTE_NAME
.
推荐阅读
- c# - 为什么无法正确格式化 Kendo UI 日期选择器输出?
- .net - GetExtendedTcpTable (iphlpapi.dll) 返回未记录的错误代码 -1073741823
- php - 在 wordPress 中返回帖子和相关元数据的方法
- sql - SQL Server 2014 兼容级别错误
- oracle - 递归地向数组添加值 pl/sql
- xcode - 如何将现有的 sqlite 数据库连接到我的 Visual Studio (Cocoa) 项目和 macOS 上的 Xcode?
- domain-driven-design - 包含过多信息的实体的 DDD
- docker - 如何在 docker 文件中下载大型数据集?
- javascript - js正则表达式在匹配后获取字符
- macos - 在 MacOS 的通知中标记为已读选项