11

我有一个架构,其中包含多个未嵌套的重复字段。

我正在尝试查询叉积,但出现错误:“无法查询重复字段的叉积...”

如果我只查询 2 个重复字段,我可以展平其中一个。然而,我有兴趣查询超过 2 个重复字段,但我不明白 FLATTEN 语法如何支持这一点。

例如,假设表结构为:a1,记录(重复):a1.b1,整数a2,记录(重复):a2.b1,整数a3,记录(重复):a3.b1,整数

我要查询:select (*) from tab

4

3 回答 3

14

您可以在FLATTEN. 它需要在 select 语句周围加上一个额外的括号。(不幸的是,语法有点难看)。例如

SELECT
  ...
FROM (
    FLATTEN((
      SELECT
        ...
      FROM (
          FLATTEN((
            SELECT
              ...
            FROM
              table),
            f1)
          )
        ),
      f2)
    )
  )
于 2013-07-11T18:29:06.547 回答
7

如果您不需要在内部选择中执行任何特定操作,则可以使用

(扁平化(扁平化(表,a1),a2))

于 2013-08-22T12:17:25.197 回答
1

现在 BigQuery 已经转移到标准 SQL,使用FLATTEN不起作用。然而,谷歌已经记录了如何迁移。这个解决方案对我有用,尽管还有其他几种方法可以做到:

SELECT
  flattened_field_1,
  flattened_field_2

FROM my_dataset.my_table
LEFT JOIN UNNEST(repeated_field_1) AS flattened_field_1
LEFT JOIN UNNEST(repeated_field_2) AS flattened_field_2
# ...etc
于 2018-08-30T18:19:00.170 回答