BIG QUERY SQL:如何在具有相同唯一键但访问期间不同的访问中查找不同的重复集?

Posted

技术标签:

【中文标题】BIG QUERY SQL:如何在具有相同唯一键但访问期间不同的访问中查找不同的重复集?【英文标题】:BIG QUERY SQL: How to find different sets of duplicates within a visit with same unique keys but different period of the visit? 【发布时间】:2016-05-18 07:54:44 【问题描述】:

这个帖子是干什么用的?

在 bigquery 中,我需要使用 caveat

删除重复的行

对于具有相同页面名称的页面访问,访问者在同一访问中发生了重复。

GROUP BY 不能解决问题

下面,我已经尽我所能解释了数据、问题、可能的解决方案和措施。

我在使用什么数据?

Adobe 数据导入 Bigquery(导入没有问题)

每一行都是按访问者的页面浏览量收集的数据。

每次访问者移动到新页面时,它都会在相同的 visit_num 和相同的 visitor_id 中计算一个 visit_page_num + 1。

为访问的每个页面记录页面名称。

问题:

在这张图片中,

一些 visit_page_num 在唯一访问者 ID、visit_num 上被计为唯一,但由于页面名称相同而重复

ISSUE
visit_page_num      pagename
       1               a
       2               b
       3               c  -issue
       4               c  -issue
       5               d
       6               d
       7               d
       8               e
       9               c  -issue
      10               c  -issue
      11               c  -issue 


Solution so far with GROUP BY
visit_page_num      pagename
       1               a
       2               b
       3               c  -issue
       5               d
       8               e


  GOAL
visit_page_num      pagename
       1               a
       2               b
       3               c  -Goal
       5               d
       8               e
       9               c  -Goal

如果在同一页面名称上出现重复但在访问的不同时间出现,那么我们如何确保以后的重复不会被消除而是被计为不同的页面访问

使用的查询:

SELECT visitor_id
,visit_num
,pagename
,first (visit_page_num) AS first
,ROW_NUMBER() OVER(PARTITION BY visitor_id, visit_num ORDER BY visitor_id, visit_num, pagename) AS int_var
FROM [table] 
GROUP BY visitor_id, visit_num, pagename
ORDER BY visitor_id, visit_num, first

输出:

一切都很好除了

visitor_id = A on visit_num = 1 和 pagename = c

采取的行动:

    我已经在第二步中尝试了具有 MIN 和 MAX 函数的 LEAD 和 LAG 函数>>> SAME OUTPUT

    检查了网络,可以翻译成 BIGQUERY 的普通 SQL 函数 >> 相同的输出

    问我的团队负责人 >> 相同的输出

    5 小时的实验 >> 相同的输出

警告

不能使用 field_date 或任何时间字段或表中提到的字段之外的任何其他字段

【问题讨论】:

以后能否请您以可重复使用的格式(而不是图像)包含示例数据 当然,我很抱歉我还不知道该怎么做。你可以发送一个链接或手册如何做到这一点?提前致谢。 只需使用注释上方工具栏中显示为 的代码块或在页脚中寻求帮助 【参考方案1】:

尝试仅定位页面之间的过渡,例如

SELECT
    visitor_id
  , visit_num
  , pagename
FROM (
    select
    *
    , lead(pagename) over(partition by visitorid order by visit_page_num)
      as nxt_page
    from table1
    ) derived
WHERE nxt_page <> pagename or nxt_page IS NULL
ORDER BY visitor_id, visit_num

【讨论】:

谢谢@Used_By_Already ,我尝试了滞后并一起领导访问。感谢您表明继续访问会节省时间!!!!非常感谢您的帮助。 :) 上升或下降并不重要,重要的是仅过滤页面转换。

以上是关于BIG QUERY SQL:如何在具有相同唯一键但访问期间不同的访问中查找不同的重复集?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Big Query 完全连接表以使用相同的过滤器

Big Query - 使用旧版和普通 sql 时的用户数量不同

使用Jackson在android中反序列化具有相同键但不同类型的json

连接两个具有相同键但不同字段的表

打字稿:创建具有相同键但不同值的对象

Big Query (SQL) 将多列转换为行/数组