如何在BigQuery中提取事件参数的键(类似Python dict.keys())
在BigQuery中提取JSON对象的键(类似Python dict.keys())
我有一张BigQuery事件表,包含event_name和event_parameters两列,需要提取event_parameters里JSON对象的所有键,实现和Python中dict.keys()类似的效果。
输入表
| event_name | event_parameters |
|---|---|
| event_a | {"from": "main_page","ID":"123"} |
| event_b | {"ID":"242","custom_value":"true"} |
期望输出表
| event_name | event_parameters |
|---|---|
| event_a | {"from","ID"} |
| event_b | {"ID","custom_value"} |
解决方案
假设event_parameters是JSON字符串类型,可以用以下SQL实现:
SELECT event_name, -- 提取键数组后替换括号为集合格式 REPLACE(REPLACE(TO_JSON_STRING(JSON_OBJECT_KEYS(event_parameters)), '[', '{'), ']', '}') AS event_parameters FROM `你的项目ID.你的数据集ID.你的表名`
如果event_parameters是STRUCT类型,先将其转为JSON字符串再处理:
SELECT event_name, REPLACE(REPLACE(TO_JSON_STRING(JSON_OBJECT_KEYS(TO_JSON_STRING(event_parameters))), '[', '{'), ']', '}') AS event_parameters FROM `你的项目ID.你的数据集ID.你的表名`
说明
JSON_OBJECT_KEYS():提取JSON对象的所有键,返回字符串数组;TO_JSON_STRING():将数组转为JSON格式的字符串(如["from","ID"]);- 两次
REPLACE():把数组的方括号替换为大括号,得到示例中的集合样式输出。
内容的提问来源于stack exchange,提问作者Boran Göksel
相关产品推荐
相关产品推荐

