从 Google BigQuery 中的选择中排除数组类型字段

Posted

技术标签:

【中文标题】从 Google BigQuery 中的选择中排除数组类型字段【英文标题】:Exclude array type field from selection in Google BigQuery 【发布时间】:2019-11-28 10:54:12 【问题描述】:

我正在使用 BigQuery 中的 Google Analytics(分析)原始数据。我正在尝试做一个简单的查询:选择除 RECORD 类型之外的所有字段。我试过这样的事情:

SELECT * Except(hits.sourcePropertyInfo.*)  FROM `project_id.dataset_id.ga_sessions_20191125` 

但我收到这样的错误

Syntax error: Expected ")" or "," but got "." at [1:21]

这些是我要排除的字段

field                                               | type
-----------------------------------------------------------
hits.sourcePropertyInfo                             | RECORD
hits.sourcePropertyInfo.sourcePropertyDisplayName   | STRING
hits.sourcePropertyInfo.sourcePropertyTrackingId    | STRING

进行此类排除的正确方法是什么?

【问题讨论】:

我尝试了不同的版本,没有 * 等,我得到了同样的错误 【参考方案1】:

您必须使用子查询重新构建数组 hits 的内容并将其输出反馈到数组中:

SELECT 
  * replace( 
      array(select as struct * except(sourcePropertyInfo) from unnest(hits))  
      AS hits 
    )
FROM `project.dataset.ga_sessions_20190101` 
LIMIT 1000

【讨论】:

【参考方案2】:

我认为您不能删除嵌套结构的子字段。不过,您可以分多个步骤执行此操作:

SELECT ga.* EXCEPT (hits),
       hits.* EXCEPT (hits.sourcePropertyInfo)
FROM `project_id.dataset_id.ga_sessions_20191125` ga

【讨论】:

这引发了一个错误:语法错误:预期为“)”或“,但得到了”。在 [2:27]

以上是关于从 Google BigQuery 中的选择中排除数组类型字段的主要内容,如果未能解决你的问题,请参考以下文章

bigQuery 和 GA-Premium 集成:从 GA 中的未过滤视图导出数据时,如何在 bigQuery 中使用 IP 过滤器(以排除内部流量)

如何在不破坏我的结构的情况下将特定单元格排除到 BigQuery 中的数组数组中?

Google BigQuery:仅从最新表中选择

Google play 到 BigQuery 转移作业中的错误

Google BigQuery GROUP BY 超时

根据google BigQuery SQL中的属性删除重复行