3

早上好。我在 Google Analytics API 中看到了这种行为,作为一个 SQL 人,我觉得这很奇怪。我想获得 adContent 的所有值的列表,所以我查询ga:adContentand (因为我还必须选择一个指标,没有明确的原因)ga:organicSearches。它在同一个组(Campaign)中,所以它在服务器上的表现可能会更好。

我得到一行:adContent 是“(未设置)”,organicSearches 是 516,674。嗯,我猜 adContent 没有被使用。但营销部门发誓确实如此,并制作了一些令人信服的屏幕截图。

后来,我随意将指标更改为ga:transactions. 在我醒来的宇宙中,这应该对任何东西都没有影响,除了该列中返回的实际值。相反,我得到了无数行,其中ga:adContent. 的值ga:transactions有时为零,因此 GA 过滤“度量 > 0”的情况并非如此。

我的查询中没有过滤器。我没有更改这两个变体之间的日期范围。谁能告诉我发生了什么事?我希望上面的查询能够转换成这样的东西,它应该返回完全相同的行数:

SELECT adContent, SUM(organicSearches)
FROM Campaign
WHERE Date BETWEEN X AND Y
GROUP BY adContent

SELECT adContent, SUM(transactions)
FROM Campaign INNER JOIN ECommerce ON <something>
WHERE Date BETWEEN X AND Y
GROUP BY adContent

我意识到 GA 可能没有在后端使用普通的 RDMS,但肯定 1 + 1 在任何数据库中仍然等于 2!

4

1 回答 1

3

根据定义ga:organicSearches,几乎永远不会有任何匹配项ga:adContent(除了边缘情况)。ga:adContent用于广告内容,其中ga:organicSearches用于会话中的自然搜索结果访问(例如,如果您在同一会话中多次使用 Google 来尝试在网站上查找特定内容)。除了尝试测量特定现象之外,不要将其用于任何事情。

尽量不要在这里使用 SQL 思维框架;Google Analytics 在后端不使用 SQL,因此您对传统关系的概念不适用。IIRC,他们使用了一些东西,其中一个BigTable 变体,它是一个 NoSQL 类型的数据库。

来自 2006 年关于 BigTable 的 Google 论文

我们简要介绍了 Google Analytics 使用的两个表。原始点击表 (̃200 TB) 为每个最终用户会话维护一行。行名称是一个包含网站名称和会话创建时间的元组。此模式确保访问同一网站的会话是连续的,并且它们按时间顺序排序。此表压缩到其原始大小的 14%。摘要表 (̃20 TB) 包含每个网站的各种预定义摘要。该表是通过定期安排的 MapReduce 作业从原始点击表生成的。每个 MapReduce 作业都从原始点击表中提取最近的会话数据。整个系统的吞吐量受限于 GFS 的吞吐量。此表压缩到其原始大小的 29%。

如果您想要所有维度列表的指标的最低公分母,请使用ga:pageviews.

于 2011-02-16T17:00:29.733 回答