Google cloud platform 如何在BigQuery中创建嵌套字段和数组的数组

Google cloud platform 如何在BigQuery中创建嵌套字段和数组的数组,google-cloud-platform,nested,google-bigquery,bigquery-standard-sql,Google Cloud Platform,Nested,Google Bigquery,Bigquery Standard Sql,我正试图根据json模式在BigQuery中创建一个表,我将把它放在GCS中,并从那里推送到一个发布/子主题。我需要创建一些数组和嵌套字段来实现这一点 通过使用struct和array_agg,我可以实现struct的数组,但我不知道如何创建数组的struct 假设我有一个json模式,如下所示: { "vacancies": { "id": "12", "timestamp": "2019-08-22T04:04:26Z", "version": "1.0",

我正试图根据json模式在BigQuery中创建一个表,我将把它放在GCS中,并从那里推送到一个发布/子主题。我需要创建一些数组和嵌套字段来实现这一点

通过使用struct和array_agg,我可以实现struct的数组,但我不知道如何创建数组的struct

假设我有一个json模式,如下所示:

{
  "vacancies": {
    "id": "12",
    "timestamp": "2019-08-22T04:04:26Z",
    "version": "1.0",
    "positionOpening": {
      "documentId": {
        "value": "505"
      },
      "statusCode": "Closed",
      "registrationDate": "2014-05-07T16:11:22Z",
      "lastUpdated": "2014-05-07T16:14:56Z",
      "positionProfiles": [
        {
        "positionTitle": "Data Scientist for international company",
        "positionQualifications": [
          {
            "experienceSummary": [
              {"measure": {"value": "10","unitCode": "ANN"}},
              {"measure": {"value": "4","unitCode": "ANN"}}
            ],
            "educationRequirement": {
              "programs": ["Physics","Computer Science"],
              "programConcentrations": ["Data Analysis","Python Programming"]
            },
            "languageRequirement": [
              {
                "competencyName": "English",
                "requiredProficiencyLevel": {"scoresNumeric": [{"value": "100"},{"value": "95"}]}
              },
              {
                "competencyName": "French",
                "requiredProficiencyLevel": {"scoresNumeric": [{"value": "95"},{"value": "70"}]}
              }
            ]
          }
        ]
        }
      ]
    }
  }
}
如何创建SQL查询以获得结果


提前感谢您的帮助

您可能需要构建一个临时表来执行此操作

第一个create语句将使用非规范化的表将其转换为具有结构数组的表

第二个create语句将获取该临时表,并将该数组嵌入结构的数组中

您可以从第一个查询中删除内部结构,并在第二个查询中使用数组包装器来构建严格的数组结构。但这应该足够灵活,您可以创建一个结构数组、一个数组结构或这两种结构的任意组合,创建次数可以达到BigQuery允许的最大深度15级

这样做的最终结果可能是一个具有标准数据类型的一列(column1)的表,以及一个名为OutsideArrayOfStructs的结构数组。该结构有两列“标准”数据类型,以及一个名为InsidearLayOfStructs的结构数组


您可能需要构建一个临时表来执行此操作

第一个create语句将使用非规范化的表将其转换为具有结构数组的表

第二个create语句将获取该临时表,并将该数组嵌入结构的数组中

您可以从第一个查询中删除内部结构,并在第二个查询中使用数组包装器来构建严格的数组结构。但这应该足够灵活,您可以创建一个结构数组、一个数组结构或这两种结构的任意组合,创建次数可以达到BigQuery允许的最大深度15级

这样做的最终结果可能是一个具有标准数据类型的一列(column1)的表,以及一个名为OutsideArrayOfStructs的结构数组。该结构有两列“标准”数据类型,以及一个名为InsidearLayOfStructs的结构数组


你能澄清一下吗?结果你想要什么?什么数组的结构?你能澄清一下吗?结果你想要什么?什么数组的结构?
 CREATE OR REPLACE TABLE dataset.tempTable as (
     select 
         column1,
         column2,
         column3,
         ARRAY_AGG(
                 STRUCT(
                     ArrayObjectColumn1,
                     ArrayObjectColumn2,
                     ArrayObjectColumn3
                 )
             ) as InsideArrayOfStructs
     FROM
         sourceDataset.sourceTable
     GROUP BY 
         column1,
         column2,
         column3 )

 CREATE OR REPLACE TABLE dataset.finalTable as (
     select 
         column1,
         ARRAY_AGG(
                 STRUCT(
                     column2,
                     column3,
                     InsideArrayOfStructs
                 )
        ) as OutsideArrayOfStructs
     FROM
         dataset.tempTable
     GROUP BY
         Column1 )