从 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 中的数组数组中?