【问题标题】:BigQuery except double nested columnBigQuery 除了双嵌套列
【发布时间】:2017-08-22 19:07:24
【问题描述】:

您好,需要从我的表中排除列 hits.latencyTracking.userTimingLabel 并选择所有其他列。如何在标准 Sql 中执行此操作? 我已经发现了一个关于类似问题的问题 (BigQuery select * except nested column),但在我的情况下,我有一个双嵌套列,我无法调整代码。 谢谢

【问题讨论】:

    标签: select google-bigquery bigquery-standard-sql


    【解决方案1】:

    以下是我对此的几分钱:
    我认为它回答了您的确切问题/案例

    #standardSQL
    SELECT * REPLACE(
      ARRAY(
        SELECT AS STRUCT hit.* 
          REPLACE((SELECT AS STRUCT latencyTracking.* EXCEPT(userTimingLabel)) AS latencyTracking)
        FROM UNNEST(hits) AS hit
      ) AS hits)
    FROM `yourProject.yourDataset.yourTable`    
    

    我在公共表上测试了如下:

    #standardSQL
    SELECT * REPLACE(
      ARRAY(
        SELECT AS STRUCT hit.* 
          REPLACE((SELECT AS STRUCT page.* EXCEPT(hostname)) AS page)
        FROM UNNEST(hits) AS hit
      ) AS hits)
    FROM `google.com:analytics-bigquery.LondonCycleHelmet.ga_sessions_20130910`
    

    【讨论】:

    【解决方案2】:

    如果hits 是一个数组,latencyTracking 是一个结构,那么:

    SELECT ARRAY(SELECT (SELECT AS STRUCT latencyTracking.* EXCEPT(userTimingLabel)) AS latencyTracking FROM UNNEST(hits)) AS hits
    FROM YourTable;
    

    【讨论】:

      【解决方案3】:

      select * except nested column 和您的问题之间的区别在于hits 是一个数组。以下是如何从结构数组中排除列:

      SELECT * REPLACE 
       (ARRAY(SELECT AS STRUCT * EXCEPT(page) FROM UNNEST(hits) h) AS hits)
      FROM `google.com:analytics-bigquery.LondonCycleHelmet.ga_sessions_20130910`
      

      【讨论】:

        猜你喜欢
        • 2017-04-22
        • 1970-01-01
        • 1970-01-01
        • 2017-04-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多