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

时间:2019-11-28 10:54:12

标签: sql google-bigquery

我正在使用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

进行这种排除的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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