BigQuery:获取 STRUCT 的字段名称
Posted
技术标签:
【中文标题】BigQuery:获取 STRUCT 的字段名称【英文标题】:BigQuery: Get field names of a STRUCT 【发布时间】:2020-08-25 11:26:43 【问题描述】:我在 BigQuery 的 STRUCT 中有一些数据。下面我将一个数据示例可视化为 JSON:
...
siblings:
david: a: 1
sarah: b: 1, c: 1
...
我想从类似于["david", "sarah"]
的查询中生成一个字段。本质上,我只想从 STRUCT(对象)中获取密钥。请注意,每个用户在兄弟 STRUCT 中都有不同的键名。
这在 BigQuery 中可行吗?
谢谢, 一个
【问题讨论】:
【参考方案1】:您的结构架构必须在整个表中保持一致。它们不能更改键,因为它们是表模式的一部分。要获取密钥,您只需查看表架构即可。
如果值发生变化,它们可能是数组中的值 - 我猜你可能会有这样的情况:
WITH t AS (
SELECT 1 AS id, [STRUCT('david' AS name, 33 as age), ('sarah', 42)] AS siblings
union all
SELECT 2, [('ken', 19), ('ryu',21), ('chun li',23)]
)
SELECT * FROM t
如果您尝试在第二行或数组中引入新键,则会收到错误 Array elements of types ... do not have a common supertype at ...
。
上述示例的第一个元素以 json 表示形式如下所示:
"id": "1",
"siblings": [
"name": "david",
"age": "33"
,
"name": "sarah",
"age": "42"
]
【讨论】:
感谢您的回复。此 STRUCT 是 Big Query 中类型为 RECORD 的模式的一部分。同样的限制是否仍然适用? 是的,在此处阅读更多信息:cloud.google.com/bigquery/docs/nested-repeated RECORD=STRUCT 和 REPEATED=ARRAY以上是关于BigQuery:获取 STRUCT 的字段名称的主要内容,如果未能解决你的问题,请参考以下文章
BigQuery:在标准 SQL 中使用重复/数组 STRUCT 字段加入?
在 Bigquery 中,如何使用标准 Sql 过滤 Struct 数组以匹配 Struct 中的多个字段?
在 BigQuery 中提取嵌套 Array/STRUCT JSON 字符串字段的组件
如何从 BigQuery 中的 Array(Struct) 类型数据结构中获取每个键名的值