【问题标题】:How to return a correct aggregate total from unnested data (Google Analytics data in BigQuery)如何从未嵌套的数据(BigQuery 中的 Google Analytics 数据)返回正确的汇总总数
【发布时间】:2017-11-23 08:39:43
【问题描述】:

我正在 BigQuery 中对 GA 数据运行一些查询,当我想从未嵌套的表中返回数据总和时,我遇到了一个反复出现的问题,其中我的总数远高于预期 - 我怀疑未嵌套的行是被计数,导致计数不准确。这是一个例子:

SELECT DATE, SUM(totals.transactions)
FROM `PROJECTNAME.43786551.ga_sessions_20*` AS GBP
    WHERE parse_date('%y%m%d', _table_suffix) between 
    DATE_sub(current_date(), interval 1 day) and
    DATE_sub(current_date(), interval 1 day)
    GROUP BY DATE

返回:

1 20171122 12967

正如预期的那样。接下来,我想使用来自hits. 的字段,这需要我取消嵌套命中,进行查询:

SELECT DATE, SUM(totals.transactions), MIN(hits.page.hostname) AS site
FROM `PROJECTNAME.43786551.ga_sessions_20*` AS GBP
CROSS JOIN UNNEST (hits) as hits
    WHERE parse_date('%y%m%d', _table_suffix) between 
    DATE_sub(current_date(), interval 1 day) and
    DATE_sub(current_date(), interval 1 day)
    GROUP BY DATE

但是,现在的结果显示:

20171122 2320004 www.hostname.com

事务的数量要高得多,我假设它正在计算所有未嵌套的行,我该如何解决这个问题,我想计算未嵌套的表,但也使用未嵌套的字段?

【问题讨论】:

    标签: sql google-bigquery


    【解决方案1】:

    你应该这样做:

        SELECT DATE, SUM(totals.transactions), 
            (SELECT MIN(hit.page.hostname) FROM UNNEST (GBP.hits) AS hit) AS site
            FROM `PROJECTNAME.43786551.ga_sessions_20*` AS GBP
            WHERE parse_date('%y%m%d', _table_suffix) between 
            DATE_sub(current_date(), interval 1 day) and
            DATE_sub(current_date(), interval 1 day)
            GROUP BY DATE, site
    

    【讨论】:

    • 我收到错误 UNNEST expression references column hit which is neither grouped nor aggregated at [2:54] - 好像它把 unnest 看作一个字段?
    • 抱歉,我忘记按站点分组了。这里发生了类似的问题:stackoverflow.com/questions/40792981/…
    猜你喜欢
    • 2015-10-17
    • 1970-01-01
    • 1970-01-01
    • 2018-08-16
    • 1970-01-01
    • 2014-05-08
    • 1970-01-01
    • 2015-08-05
    • 1970-01-01
    相关资源
    最近更新 更多