【问题标题】:Querying multiple repeated fields in BigQuery在 BigQuery 中查询多个重复字段
【发布时间】:2013-07-10 00:01:44
【问题描述】:

我的架构包含多个未嵌套的重复字段。

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

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

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

我想查询: 从选项卡中选择 (*)

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

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

    SELECT
      ...
    FROM (
        FLATTEN((
          SELECT
            ...
          FROM (
              FLATTEN((
                SELECT
                  ...
                FROM
                  table),
                f1)
              )
            ),
          f2)
        )
      )
    

    【讨论】:

    • 像魅力一样工作!我想在最内部的选择中指定只选择一次的字段,然后在所有其他嵌套选择中写入 select *。但是我不能指定 order by 子句,因为 order by 要求该字段出现在选择字段中。
    • 在接受的答案上做得很好。但是,可能应该更新:cloud.google.com/bigquery/docs/reference/standard-sql/….
    【解决方案2】:

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

    (FLATTEN(FLATTEN(table, a1), a2))

    【讨论】:

      【解决方案3】:

      现在 BigQuery 已迁移到标准 SQL,使用 FLATTEN 不起作用。但是Google has documented how to migrate。这个解决方案对我有用,虽然还有其他几种方法可以做到:

      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
      

      【讨论】:

        猜你喜欢
        • 2017-09-25
        • 1970-01-01
        • 2016-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多