Search code examples
google-bigqueryrollup

Can BigQuery drop subtotals rows WHEN responding to ROLLUP query


When I query BQ with ROLLUP by potentially large set of grouping criteria field (in this case campaign_group_id)

for example:

SELECT
  campaign_group_id AS campaign_group_id,
  DATE(DATE_ADD(TIME, 3, 'HOUR')) AS DAY,
  SUM(impressions) AS imps
FROM
  [browser_traffic.2016_05_28],
  [browser_traffic.2016_05_29]
WHERE
  ( DATE_ADD( TIME, 3, "HOUR") >= '2016-05-28 00:00:00'
    AND DATE_ADD( TIME, 3, "HOUR") < '2016-05-30 00:00:00' )
GROUP EACH BY ROLLUP (campaign_group_id, DAY)
ORDER BY DAY ASC, campaign_group_id ASC
LIMIT 500

BQ returns many rows with subtotals which is not applicable in my use case:

+-------------------+------+-----------+
| campaign_group_id | day  |   imps    |
+-------------------+------+-----------+
|              NULL | NULL | 158423933 |
|                61 | NULL |         0 |
|               496 | NULL |     79870 |
|               497 | NULL |     10492 |
|               809 | NULL |         0 |
|               936 | NULL |      2451 |
|               937 | NULL |         0 |
|               940 | NULL |      6844 |
|               942 | NULL |    207685 |
|               946 | NULL |         0 |
|               961 | NULL |         0 |
|               975 | NULL |     16167 |
|               976 | NULL |     15767 |
|              1018 | NULL |         0 |
|              1020 | NULL |         0 |
|              1022 | NULL |    766875 |
|              1039 | NULL |    355765 |
...

I need to somehow reduce subtotal rows from result but leave intact grand total row (which is first row in above result)

Is it possible that BQ returns only grand total row for selected fields?


Solution

  • You can filter the result of the query with another SELECT statement:

    SELECT campaign_group_id, day, imps 
    FROM (
        ... your rollup query with LIMIT removed ...
    )
    WHERE (day IS NOT NULL) OR (campaign_group_id IS NULL)
    LIMIT 500