如何将表 1 上的结构数组与 BigQuery 中表 2 的普通列连接起来
Posted
技术标签:
【中文标题】如何将表 1 上的结构数组与 BigQuery 中表 2 的普通列连接起来【英文标题】:How to Join Array of struct on table1 with normal column of table 2 in BigQuery 【发布时间】:2021-01-18 02:19:15 【问题描述】:Tabel1 and Table 2
select p.id,q.description
from table1 p
join table2 q
on q.control_number
in unnest(p.results.control_number)
当我处理这个时,我收到以下错误:
无法访问具有类型的值的字段 control_number ARRAY
>
我也尝试过在表格之后取消嵌套,例如:
select p.id,q.f.description
from table1 p,Unnest(finder) f
join table2 q
on q.control_number in unnest(p.f.results.control_number)
但这也没有用。
谁能告诉我怎么了?
【问题讨论】:
【参考方案1】:另一种选择
select p.id,q.description
from table1 p, table2 q
where q.control_number in (select control_number from p.finder)
【讨论】:
嗨,米哈伊尔,感谢您努力帮助我。但是当我运行查询时,我只在一行中获取所有描述,而不是针对每个 control_number 和 Id。您能否建议我可能的修复这是我使用的查询,从 table1 p 中选择 p.finder,q.description,table2 q where q.control_number in (select control_number from p.finder) 你得到的正是你所要求的!在您的下一个问题中 - 请确保提供所有详细信息 - 示例输入、预期输出。等等查看How to create a Minimal, Reproducible Example。同时,我认为您的最初问题已得到充分回答:o)【参考方案2】:在标准 SQL 中尝试以下操作:
with table1 as (
select '1' id, array[struct('a1' as control_number)] finder
UNION ALL
select '2' id, array[struct('a2' as control_number)] finder
UNION ALL
select '3' id, array[struct('a3' as control_number)] finder
),
table2 as (
select 'description for a1' description, 'a1' control_number
UNION ALL
select 'description for a2' description, 'a2' control_number
)
select p.id,q.description
from table1 p, unnest(p.finder) f join table2 q on q.control_number = f.control_number;
WITH
子句用于模拟表中的数据。
【讨论】:
感谢您帮助我。但是当我尝试运行此查询时,它运行了 5 分钟以上但还没有结果。我尝试停止它并重新运行,但没有提高性能。有什么改变吗?以上是关于如何将表 1 上的结构数组与 BigQuery 中表 2 的普通列连接起来的主要内容,如果未能解决你的问题,请参考以下文章
如何在不破坏我的结构的情况下将特定单元格排除到 BigQuery 中的数组数组中?
将表从 google bigquery 导出到 google 存储
在 Bigquery 中,如何将结构的字符串化数组转换为正确的数组?