查询Bigquery重复字段

时间:2018-10-11 20:10:01

标签: google-cloud-platform google-bigquery

下面是我的BigQuery表的架构。我正在选择句子ID,存储和BU_model,然后将数据插入BigQuery中的另一个表中。生成的新表的数据类型分别为整数,重复和重复。 我想展平/取消嵌套重复的字段,以便在第二个表中将它们创建为STRING字段。使用标准sql如何实现?

+- sentences: record (repeated)
|  |- sentence_id: integer                                                                                                                             
|  |- autodetected_language: string                                                                                                                    
|  |- processed_language: string 
|  +- attributes: record
|  |  |- agent_rating: integer
|  |  |- store: string (repeated)
|  +- classifications: record
|  |  |- BU_Model: string (repeated)

我用来创建第二个表的查询如下。我想在BU_Model上查询为STRING列。

SELECT sentence_id ,a.attributes.store,a.classifications.BU_Model
FROM staging_table , unnest(sentences) a

预期的输出应如下所示:

登台表:

41783851    regions     Apparel
            district    Footwear
12864656    regions
            district

最终目标表:

41783851    regions     Apparel
41783851    regions     Footwear            
41783851    district    Apparel
41783851    district    Footwear
12864656    regions
12864656    district    

我尝试了以下查询,它似乎按预期工作,但这意味着我必须取消嵌套每个预期的重复字段。我在Bigquery中的表格有50多个重复的列。有没有更简单的方法解决这个问题?

SELECT
sentence_id,
flattened_stores,
flattened_Model
FROM `staging`  
left join unnest(sentences) a
left join unnest(a.attributes.store) as flattened_stores
left join unnest(a.classifications.BU_Model) as flattened_Model

1 个答案:

答案 0 :(得分:2)

假设您仍需要在输出中保留三列-将数组展平为字符串

SELECT sentence_id , 
  ARRAY_TO_STRING(a.attributes.store, ',') store,
  ARRAY_TO_STRING(a.classifications.BU_Model, ',') BU_Model
FROM staging_table , unnest(sentences) a  
  

更新以解决问题中的最新更改

在BigQuery Standard SQL中-使用LEFT JOIN UNNEST()(就像您在上一个查询中所做的一样)是完成要获得的结果的最合理方法

在BigQuery旧版SQL中-您可以使用FLATTEN语法-但有一个缺点,即需要对所有50列以上的列重复相同的内容

非常简化的示例:

#legacySQL
SELECT sentence_id, store, BU_Model
FROM (FLATTEN([project:dataset.stage], BU_Model))  

结论:我会采用LEFT JOIN UNNEST()方法