首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Google BigQuery将嵌套的JSON字符串动态展平为不同的列(仅限大查询)

使用Google BigQuery将嵌套的JSON字符串动态展平为不同的列(仅限大查询)
EN

Stack Overflow用户
提问于 2019-03-20 05:05:20
回答 1查看 0关注 0票数 0

我在BigQuery表中有一个列,看起来像这样。

代码语言:javascript
复制
{"name": "name1", "last_delivered": {"push_id": "push_id1", "time": "time1"}, "session_id": "session_id1", "source": "SDK", "properties": {"UserId": "u1"}}

有没有办法在GBQ中获得这样的输出?(基本上将整个列压平成不同的列)

代码语言:javascript
复制
name    last_delivered.push_id   last_delivered.time   session_id   source   properties.UserId

name1       push_id1                     time1         session_id1   SDK          uid1

我希望这个过程是动态的。

假设对于下一行......可能还有2个新属性,如年龄,工作等,对于其他一些行,可能也会少一些。因此它应该自动拾取列名称。(如果值不存在,则可能填充NULL)

有没有办法在BigQuery中做到这一点。(我部分知道如何在python中完成它,因为我正在处理非常大量的数据,如果时间太长,在Python中做很多事情)

EN

回答 1

Stack Overflow用户

发布于 2019-03-20 14:20:30

您可以使用JSON_EXTRACT_SCALAR

代码语言:javascript
复制
WITH json_table AS (

SELECT '{"name": "name1", "last_delivered": {"push_id": "push_id1", "time": "time1"}, "session_id": "session_id1", "source": "SDK", "properties": {"UserId": "u1"}}' AS json_field

)

SELECT 
JSON_EXTRACT_SCALAR(json_field, "$.name") AS name,
JSON_EXTRACT_SCALAR(json_field, "$.last_delivered.push_id") AS last_delivered_push_id,
JSON_EXTRACT_SCALAR(json_field, "$.last_delivered.time") AS last_delivered_time
FROM json_table
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100006474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档