如何将 BigQuery 嵌套记录取消嵌套到多个列中

ana*_*045 3 sql google-bigquery google-cloud-platform

我正在尝试解除下表的嵌套。

在此输入图像描述

使用下面的取消嵌套查询来展平表格

SELECT 
id,
 name ,keyword
FROM `project_id.dataset_id.table_id`
,unnest (`groups` ) as `groups`
where id = 204358
Run Code Online (Sandbox Code Playgroud)

问题是,这会重复行(名称除外),就像展平表的情况一样。

在此输入图像描述

如何修改查询以将名称放入两个不同的列而不是行中。预期输出如下 -

在此输入图像描述

Mar*_*ann 5

这是因为逗号是一个交叉连接- 与未嵌套的数组结合使用时,它是一个横向交叉连接。您为数组中的每一行重复父行。

旋转数组的一个问题是数组可以具有可变数量的行,但表必须具有固定数量的列。

因此,您需要一种方法来决定将某一行变为某一列。

例如与

SELECT 
  id,
  name,
  groups[ordinal(1)] as firstArrayEntry,
  groups[ordinal(2)] as secondArrayEntry,
  keyword
FROM `project_id.dataset_id.table_id`
unnest(groups)
where id = 204358

Run Code Online (Sandbox Code Playgroud)

如果您的数组有一个键值对,您可以决定使用该键。例如

SELECT 
  id,
  name,
  (select value from unnest(groups) where key='key1') as key1,
  keyword
FROM `project_id.dataset_id.table_id`
unnest(groups)
where id = 204358
Run Code Online (Sandbox Code Playgroud)

但你的桌子似乎不是这样的......

第三种选择可能是PIVOT与交叉连接解决方​​案结合使用,但这也有限制:而且我不确定这有多繁重的计算。