如何计算位于 BigQuery 表中的 json 数组中的对象数?

Posted

技术标签:

【中文标题】如何计算位于 BigQuery 表中的 json 数组中的对象数?【英文标题】:How do I get a count of the number of objects in a json array that lives in a BigQuery table? 【发布时间】:2021-08-18 16:09:01 【问题描述】:

我正在查询 BigQuery 中的一个表,其中包含 Id(整数)和 user_json(字符串)列。 user_json 是一个 json 数组,结构如下: "user_id": "123456", “is_deleted”:假, “地址簿”: “uaddr_Qi6vCZ3a”: “城市”:“无处”, “状态”:“CA”, "last_name": "史密斯", "first_name": "约翰", "postal_code": "99999", "iso2_country": "美国", "phone_number": "1234567809", "address_line_1": "123 Spring Drive", "address_line_2": "Apt 101", “address_book_item_id”:“uaddr_Qi6vCZ3a” , “uaddr_hZxdzoOE”: “城市”:“某处”, “状态”:“NV”, "last_name": "史密斯", "first_name": "约翰", "postal_code": "88888", "iso2_country": "美国", "phone_number": "9087654321", "address_line_1": "秋季大道 321 号", “address_book_item_id”:“uaddr_hZxdzoOE”

我需要找到每个Id 的地址编号。 “uaddr_xxxx”对于每个“address_book”条目都是唯一的。我希望能够计算每个唯一 Id 中有多少“uaddr_xxxx”在 user_json 中。

【问题讨论】:

【参考方案1】:

考虑以下方法

select id,
  array_length(regexp_extract_all(user_json, r'"(uaddr_[^"]+)":')) uaddr_count,
  regexp_extract_all(user_json, r'"(uaddr_[^"]+)":') uaddr_items
from `project.dataset.table`    

如果应用于您问题中的样本数据 - 输出是

【讨论】:

以上是关于如何计算位于 BigQuery 表中的 json 数组中的对象数?的主要内容,如果未能解决你的问题,请参考以下文章

需要 SQL 查询帮助以解析 BigQuery 表中的 JSON 数据

将谷歌云存储中的 json 文件加载到 bigquery 表中

使用现有 JSON 文件,如何将此数据上传到 BigQuery 并使用 JSON 文件中的数据计算新字段?

如何从基于嵌套 json 的 BigQuery 表中进行选择?

尝试读取 BigQuery 表中的 JSON 结构时出错

将 Google BigQuery 中一个表中的 XML 数据转换为同一表中另一列中的 JSON 数据