bigquery:加入“结构”列

Posted

技术标签:

【中文标题】bigquery:加入“结构”列【英文标题】:bigquery: join to a "struct" column 【发布时间】:2021-07-12 16:06:15 【问题描述】:

所以我在 bigquery 中有一个扁平(普通)表(表 a)和另一个(表 b)有几个结构列。我需要加入这两个表。但挑战是我需要使用表 a 中的 id 并将其连接到表 b 中的 id ,这是一个“结构”类型。我最初尝试使用“UNNEST”子句,但后来了解到我只能将它用于“ARRAY”类型。

然后我尝试了以下代码“

select a.user_id
from `table_a` a
join `table_b` b
on a.user_id = b.prices.cars_user_ids
limit 10

(我之所以使用 .price. 是因为它是一个结构体)

但不幸的是,我收到以下错误:

No matching signature for operator = for argument types: STRING, ARRAY<STRING>. Supported signature: ANY = ANY at [4:4]

我明白它为什么抱怨。但我想到的唯一解决方案是使用“UNNEST”功能。再一次,它不会工作,因为它不是一个数组。你能帮忙吗?

【问题讨论】:

请提供样本数据和期望的结果。 How do I ask a good question? 【参考方案1】:

错误消息根本没有提到结构,而是一个数组。我怀疑你想要:

select a.user_id
from `table_a` a join
     (`table_b` b cross join
      unnest(b.prices) price
     )
     on a.user_id = price.cars_user_ids;

【讨论】:

感谢您的回复。我尝试了您的建议,但它给了我以下错误:```UNNEST 中引用的值必须是数组。 UNNEST 包含类型 STRUCT, cars_user_ids ARRAY, ...> 在 [5:8] `` 的表达式 并非所有问题都可以或应该在这里得到解答。避免尝试回答问题which...

以上是关于bigquery:加入“结构”列的主要内容,如果未能解决你的问题,请参考以下文章

Google BigQuery SQL:加入后防止列前缀重命名

BigQuery - 加入和旋转大型表

在 BigQuery 中加入 2 列结构

通过 Cloud Datalab 加入 Google BigQuery

解析列中具有动态键的 JSON 值并将 JSON 转换为 BigQuery 中的记录列结构

如何将表 1 上的结构数组与 BigQuery 中表 2 的普通列连接起来