“EACH”关键字在“GROUP EACH BY”中没有返回正确的结果

Posted

技术标签:

【中文标题】“EACH”关键字在“GROUP EACH BY”中没有返回正确的结果【英文标题】:"EACH" Keyword isn't returning correct result in "GROUP EACH BY" 【发布时间】:2014-12-15 16:25:10 【问题描述】:

上个月我在 BigQuery 和关键字“EACH”的使用上遇到了问题。我有许多报告依赖于对谷歌分析数据的一些非常具体和精炼的查询,由于这个问题我无法更新。我没有以任何方式更改我的查询,但有一天结果开始显示为“0”而不是实际数字。

我很想知道 BigQuery 中最近是否有可能导致此问题的生产更改,或者我是否做错了什么。我真的很希望对此有一个解决方案,它已经发生了一段时间,并且确实影响了我们已经逐渐依赖的报告需求。以下是我的问题的一些其他详细信息:

产生不良结果的作业 ID:jjldtlwOeW2zyxvi7SViTxsDJzA

错误发布:https://code.google.com/p/google-bigquery/issues/detail?id=195

-- 不产生正确结果的查询

select
    date(date) as date
    ,sum(case when hits.type = "page" then 1 else 0 end) as pageviews
    ,count(distinct (case when hits.type = "page" then concat(fullvisitorid, string(visitid), hits.page.pagepath) end), 1000000) as unique_pageviews

from
    table_date_range([XXXXXXXX.ga_sessions_], timestamp('2014-10-06'), timestamp('2014-10-06'))

group each by
    date

ignore case;

-- 有效的查询(但无法处理大量数据):

select
    date(date) as date
    ,sum(case when hits.type = "page" then 1 else 0 end) as pageviews
    ,count(distinct (case when hits.type = "page" then concat(fullvisitorid, string(visitid), hits.page.pagepath) end), 1000000) as unique_pageviews

from
    table_date_range([XXXXXXXX.ga_sessions_], timestamp('2014-10-06'), timestamp('2014-10-06'))

group by
    date

ignore case;

【问题讨论】:

【参考方案1】:

我认为您在 IGNORE CASEGROUP EACH BY 中发现了一个错误。

我能够根据自己的一组分析数据进行重现。我们将进一步调查以确定根本原因。同时,一种解决方法是从查询中删除IGNORE CASE,并使用LOWER 使每个相等检查不区分大小写,如下所示:

select
    date
    ,sum(case when lower(hits.type) = "page" then 1 else 0 end) as pageviews
    ,count(distinct (case when lower(hits.type) = "page" then concat(fullvisitorid, string(visitid), hits.page.pagepath) end), 1000000) as unique_pageviews

from
    table_date_range([XXXXXXXX.ga_sessions_], timestamp('2014-10-06'), timestamp('2014-10-06'))

group each by
    date;

【讨论】:

太棒了!这实际上是昨天我的想法,但我没时间试一试。这是一个很好的临时解决方案,但添加到我的一些长达 100 行的查询中非常乏味。 我们已经确定了根本原因并提交了修复程序。修复应该在假期之后部署,可能在 1 月份。

以上是关于“EACH”关键字在“GROUP EACH BY”中没有返回正确的结果的主要内容,如果未能解决你的问题,请参考以下文章

$.each和$().each

$.each()与$(selector).each()

$.each()和$(selector).each()

$.each() 与 $(selector).each()的区别

jquery中$each()

jQuery中each()find()filter()等节点操作方法