【问题标题】:Exclude array type field from selection in Google BigQuery从 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

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

【问题讨论】:

  • 我尝试了不同的版本,没有 * 等,我得到了同样的错误

标签: sql google-bigquery


【解决方案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]
    猜你喜欢
    • 2020-09-14
    • 2014-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多