当使用" noflatten_results"选择进入具有GROUP BY的表时,BigQuery会使结果变平。国旗

时间:2014-10-09 05:45:58

标签: google-bigquery

我有一张包含重复记录的表格。我想删除它们。我创建了一个名为“hash_code”的列,它只是所有列的sha1哈希值。重复的行将具有相同的哈希码。除非我尝试使用包含GROUP BY的查询创建新表,否则一切都很好。我的表有RECORD数据类型,但即使我指定它没有展平,创建的新表也会变平。看起来像GROUP BY和“-noflatten_results”标志并不好看。

这是我运行的示例命令行:

bq query --allow_large_results --destination_table mydataset.my_events --noflatten_results --replace 
"select hash_code, min(event) as event, min(properties.adgroup_name) as properties.adgroup_name, 
min(properties.adid) as properties.adid, min(properties.app_id) as properties.app_id,  
min(properties.campaign_name) as properties.campaign_name from mydataset.my_orig_events group each 
by hash_code "

在上面的示例中,属性是具有嵌套字段的RECORD数据类型。结果表没有RECORD数据类型的属性。相反,它将properties.adgroup_name转换为properties_adgroup_name等。

是否有任何方法可以强制BigQuery将结果集视为RECORD而不是在GROUP BY中展平?

谢谢!

1 个答案:

答案 0 :(得分:2)

有一些已知的案例,尽管请求不平坦的结果,但查询结果可以展平。

  1. 包含GROUP BY子句
  2. 的查询
  3. 包含ORDER BY子句
  4. 的查询
  5. 选择具有平面别名的嵌套字段(例如SELECT record.record.field AS flat_field)。请注意,这只会在应用了别名的情况下展平特定字段,并且只有在字段及其父记录不重复的情况下才会展平字段。
  6. 在这些情况下,BigQuery查询引擎总是展平查询结果。据我所知,除了从查询中删除这些子句或别名之外,此行为没有解决方法。