如何在BigQuery中创建嵌套字段和数组的数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在BigQuery中创建嵌套字段和数组的数组相关的知识,希望对你有一定的参考价值。
我正在尝试根据json模式在BigQuery中创建一个表,我将其放入GCS并从那里推送到pub / sub主题。为此,我需要创建一些数组和嵌套字段。
通过使用struct和array_agg我可以实现struct数组,但是我不知道如何创建array的结构。
想象一下我有一个如下的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语句将使用该临时表,并将该数组嵌入到struct(数组)中。
您可以从第一个查询中删除内部结构,并在第二个查询中使用数组包装器来构建严格的数组结构。但这足够灵活,您可以创建一个结构数组,一个数组结构或两者的任意组合,次数最多可以达到BigQuery允许的最大15层。
这的最终结果可能是一个表,其中包含标准数据类型的一列(column1),以及称为OutsideArrayOfStructs的结构数组。该Struct具有两列“标准”数据类型,以及称为InsideArrayOfStructs的结构数组。
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 )
以上是关于如何在BigQuery中创建嵌套字段和数组的数组的主要内容,如果未能解决你的问题,请参考以下文章