sql - Big Query - BigQuery 和 Analytics 中不同数量的事件和会话
问题描述
我使用以下查询查询(普通 SQL)每个主机名的浏览量、点击量、事件和会话数:
SELECT
hits.page.hostname,
SUM(IF(hits.type = 'PAGE',1,0)) AS pageviews,
COUNT(hits.hitNumber) AS hits,
SUM(IF(hits.type = 'EVENT',1,0)) AS events,
COUNT(DISTINCT CASE WHEN hits.isInteraction IS TRUE THEN CONCAT(CAST(fullvisitorid as string),CAST(visitid as string)) END) AS sessions
FROM `XXX_sessions_*`, UNNEST(hits) AS hits
WHERE _TABLE_SUFFIX BETWEEN '20181231' AND '20181231'
GROUP BY 1
如果我将结果与 Google Analytics 进行比较,页面浏览量和点击量是相同的,但事件和会话存在差异。为什么?我做错了什么?每一个帮助表示赞赏!
编辑: 我设法通过以下方式获得正确数量的事件:
COUNT(hits.eventInfo.eventCategory) AS totalEvents
但会话仍然存在问题。
Edit2: 我找到了会话的解决方案。Google Analytics 不考虑主机是否在会话中发生变化。因此,只考虑第一次命中的主机。
(SELECT page.hostname FROM UNNEST(hits) WHERE hitnumber = (SELECT MIN(hitnumber) FROM UNNEST(hits)))
解决方案
推荐阅读
- python-3.x - 有没有一种简单的方法可以使用 glom 从字典中获取未知键?
- amazon-web-services - 如何使用 Webpack 配置 AWS Codebuild
- php - php wordpress 在钩子内处理并将值同步到钩子外的变量
- ruby-on-rails - Mongo::Error::OperationFailure: $not need a regex or a document in rails mongoid
- python - 检查至少一个列表是否包含特定元素
- javascript - 更改子组件中的图像将更新父组件中更高的大多数 html img 标签
- javascript - 如何在Javascript中用数组制作手风琴?
- c++ - 修改 Gcode 中间打印以响应概念打印机的传感器反馈
- java - 在 Hibernate 中连接表时如何忽略某些列?
- swift - 为什么有时 Swift 需要明确指出参数而有时不需要?