如何在BigQuery中完全使用嵌套模式创建新表

p.p*_*com 5 sql json nested google-bigquery

我在BigQuery中有一个嵌套的表A,其架构如下:

    {
    "name": "page_event",
    "mode": "repeated",
    "type": "RECORD",
    "fields": [
        {
            "name": "id",
            "type": "STRING"
        }
    ]
    }
Run Code Online (Sandbox Code Playgroud)

我想用其他表中的数据来丰富表A,并将结果保存为新的嵌套表.假设我想在表A(创建表B)中添加"description"字段,所以我的模式如下:

    {
    "name": "page_event",
    "mode": "repeated",
    "type": "RECORD",
    "fields": [
        {
            "name": "id",
            "type": "STRING"
        },
        {
            "name": "description",
            "type": "STRING"
        }
    ]
    }
Run Code Online (Sandbox Code Playgroud)

我如何在BigQuery中执行此操作?似乎没有在BigQuery SQL中创建嵌套结构的函数(NEST函数除外,它产生一个列表 - 但是这个函数似乎不起作用,失败并出现意外错误)

我能想到的唯一方法就是:

  • 使用字符串连接函数生成表B,其中单个字段称为"json",内容为来自A的丰富数据,转换为json字符串
  • 将B作为文件集F导出到GCS
  • 将F加载为表C.

有更简单的方法吗?

Mik*_*ant 1

为了丰富现有表的架构,可以使用表补丁 API
https://cloud.google.com/bigquery/docs/reference/v2/tables/patch

请求如下所示

PATCH https://www.googleapis.com/bigquery/v2/projects/{project_id}/datasets/{dataset_id}/tables/{table_id}?key={YOUR_API_KEY}

{
 "schema": {
  "fields": [
   {
    "name": "page_event",
    "mode": "repeated",
    "type": "RECORD",
    "fields": [
     {
      "name": "id",
      "type": "STRING"
     },
     {
      "name": "description",
      "type": "STRING"
     }
    ]
   }
  ]
 }
}
Run Code Online (Sandbox Code Playgroud)

补丁前

在此输入图像描述

补丁后

在此输入图像描述