在 BigQuery 中展平嵌套层次结构

Posted

技术标签:

【中文标题】在 BigQuery 中展平嵌套层次结构【英文标题】:Flattening nested hierarchies in BigQuery 【发布时间】:2013-04-21 19:42:01 【问题描述】:

我有一个 BigQuery 表,其中包含两个嵌套级别的重复字段层次结构。 我需要在内部级别的叶字段上进行自连接(将表与自身连接)。

使用 FLATTEN 子句只会变平一个级别,我不知道如何做到这一点。 理论上我需要编写嵌套的 FLATTEN,但我无法完成这项工作。

任何帮助将不胜感激。

例子:

给定以下表结构:

a1,整数 a2、记录(重复) a2.b1,整数 a2.b2,记录(重复) a2.b2.c1,整数

如何编写一个在 a2.b2.c1 两侧进行自联接(加入每个)的查询。

【问题讨论】:

【参考方案1】:

嵌套的扁平化——即子查询的扁平化——应该可以工作。请注意,它需要过多的括号。 给定架构:

nested_repeated_f: [ inner_nested_repeated_f:[ string_f]]

以下查询将起作用:

SELECT t1.f1 FROM (
  SELECT nested_repeated_f.inner_nested_repeated_f.string_f as f1 
  FROM (FLATTEN((
    SELECT nested_repeated_f.inner_nested_repeated_f.string_f
    FROM 
      (FLATTEN(lotsOdata.nested002, nested_repeated_f.inner_nested_repeated_f))
    ), nested_repeated_f))) as t1    
JOIN (
  SELECT nested_repeated_f.inner_nested_repeated_f.string_f as f2
  FROM (FLATTEN((
    SELECT nested_repeated_f.inner_nested_repeated_f.string_f
    FROM 
      (FLATTEN(lotsOdata.nested002, nested_repeated_f.inner_nested_repeated_f))
    ), nested_repeated_f))) as t2
on t1.f1 = t2.f2

【讨论】:

使用具体查询示例更新响应。

以上是关于在 BigQuery 中展平嵌套层次结构的主要内容,如果未能解决你的问题,请参考以下文章

在 BigQuery 上展平多个嵌套数组

在 BigQuery 中取消嵌套结构

Bigquery:UNNEST 重复与展平表性能

如何在展平嵌套字段后将数据​​从一个 bigquery 表流式插入到另一个表?

将 BigQuery 嵌套字段内容展平为新列而不是行

生成嵌套 JSON(反向横向展平)