1

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

4

3 回答 3

1

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

SELECT ARRAY(SELECT (SELECT AS STRUCT latencyTracking.* EXCEPT(userTimingLabel)) AS latencyTracking FROM UNNEST(hits)) AS hits
FROM YourTable;
于 2017-03-29T15:57:31.560 回答
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`
于 2017-03-29T19:14:04.920 回答
0

select * 除了嵌套列和您的问题之间的区别在于它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-03-29T15:58:05.883 回答