在 BigQuery 中展平嵌套和重复的结构(标准 SQL)

Posted

技术标签:

【中文标题】在 BigQuery 中展平嵌套和重复的结构(标准 SQL)【英文标题】:Flattening a nested and repeated structure in BigQuery (standard SQL) 【发布时间】:2020-12-08 03:43:54 【问题描述】:

有很多关于在 BigQuery 中取消嵌套重复字段的帖子 - 但是,对于这个环境,我几乎尝试了所有我发现的代码变体来展平数据文件。但是,如果不在id 字段中创建空白,我似乎无法生成一个。看来我需要展开嵌套变量?

我正在使用属于公共数据集的 COVID 维度数据集。这是一些产生我的问题的最小代码:

SELECT
   id,
   authors
FROM
   `covid-19-dimensions-ai.data.publications`
CROSS JOIN 
   UNNEST(authors)
LIMIT 1000 

而且,这是运行此查询后的 JSON 结构。一切都被我想要的结构展平了,但我不知道如何填写/避免空白 id 变量。


    "id": "pub.1130234899",
    "authors": 
      "first_name": "Eric M",
      "last_name": "Yoshida",
      "initials": null,
      "researcher_id": "ur.01071531321.03",
      "grid_ids": [
        "grid.17091.3e"
      ],
      "corresponding": false,
      "raw_affiliations": [
        "Division of Gastroenterology, University of British Columbia, Vancouver, British Columbia, Canada"
      ],
      "affiliations_address": [
        
          "grid_id": "grid.17091.3e",
          "city_id": "6173331",
          "state_code": "CA-BC",
          "country_code": "CA",
          "raw_affiliation": "Division of Gastroenterology, University of British Columbia, Vancouver, British Columbia, Canada"
        
      ]
    
  

【问题讨论】:

【参考方案1】:

查看对原始查询的小修正

SELECT
   id,
   author
FROM
   `covid-19-dimensions-ai.data.publications`
CROSS JOIN 
   UNNEST(authors) author
LIMIT 1000 

【讨论】:

我复制并粘贴了您的更正,但我仍然会在一组记录中发现偶尔丢失的 id 值。例如,作者将在一行中拥有完整的信息。但是,如果作者有 3 个多个从属关系,则这些从属关系会正确扩展到行,但仅列出第一个从属关系的 id。 什么ID?需要它来解决问题 这些是出版记录。 id 代表一个独特的出版物。 author 是字段和数组的集合。当我取消嵌套时,id 值不会填充到所有行中。 我认为您应该更新您的问题以提供更多详细信息! 也许你认为有问题的屏幕截图,以及你想要的样子

以上是关于在 BigQuery 中展平嵌套和重复的结构(标准 SQL)的主要内容,如果未能解决你的问题,请参考以下文章

Bigquery:UNNEST 重复与展平表性能

如何在 bigquery 标准 sql 中展平结构?

查询 Bigquery 重复字段

在 BigQuery 中取消嵌套结构

在 BigQuery 上展平多个嵌套数组

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