BigQuery - 从 Google Analytics 导出不同的事件

Posted

技术标签:

【中文标题】BigQuery - 从 Google Analytics 导出不同的事件【英文标题】:BigQuery - Exporting different Events from Google Analytics 【发布时间】:2018-12-03 14:46:20 【问题描述】:

可能是一个初学者的问题,但我在这里找不到灵魂。

我想从我的 Google Analytics(分析)帐户中导出 BigQuery 中的不同事件(仅是总事件指标)

所以 f.e.我有一个下载事件和一个搜索事件,我希望将每个事件放在一个列中,向我显示每个事件的总事件指标。我针对不同的条件过滤了这两个事件,以确保我有正确的事件。

我在这里使用 LegacySQL 并希望从同一个表中导出所有数据。问题是,LegacySQL 中不允许子选择,有什么想法可以解决这个问题吗?

SELECT  clientId, totals.timeOnSite, trafficSource.source,
(SELECT hits.eventInfo.eventAction FROM (TABLE_DATE_RANGE([xxxxxx.ga_sessions_], TIMESTAMP('2018-11-25'), TIMESTAMP('2018-11-25')))   WHERE hits.eventInfo.eventCategory = 'Download' AND hits.type = 'EVENT' AND hits.eventInfo.eventAction = 'pdf') AS DownloadEvent,
(SELECT hits.eventInfo.eventLabel FROM (TABLE_DATE_RANGE([xxxxxx.ga_sessions_], TIMESTAMP('2018-11-25'), TIMESTAMP('2018-11-25')))   WHERE hits.eventInfo.eventLabel  = 'search-header' OR 'search-mainpage' AND hits.type = 'EVENT') AS SearchEvent,

COUNT(1) eventHits FROM (TABLE_DATE_RANGE([xxxxxx.ga_sessions_], TIMESTAMP('2018-11-25'), TIMESTAMP('2018-11-25')))

【问题讨论】:

【参考方案1】:

在 BQ Legacy SQL 中允许子选择。下面应该会给你你正在寻找的结果。

您不需要在这里使用子查询。使用简单的CASE 语句应该可以解决问题。 case 语句将筛选出符合您要查找的条件的行。

查询

SELECT 
clientId,
totals.timeOnSite, 
trafficSource.source,
SUM(COUNT(CASE WHEN (hits.eventInfo.eventCategory = 'Download' AND hits.type = 'EVENT' AND hits.eventInfo.eventAction = 'pdf') THEN hits.eventInfo.eventAction END)) AS DownloadEvent,
SUM(COUNT(CASE WHEN (hits.eventInfo.eventLabel  = 'search-header' OR hits.eventInfo.eventLabel  = 'search-mainpage') AND hits.type = 'EVENT' THEN hits.eventInfo.eventLabel END)) AS SearchEvent
FROM TABLE_DATE_RANGE([xxxxxx.ga_sessions_], TIMESTAMP('2018-11-25'), TIMESTAMP('2018-11-25'))
GROUP BY 1,2,3

现在,如果您想使用子查询,如下所示

带子查询

SELECT  
b.clientId, 
b.totals.timeOnSite, 
b.trafficSource.source,
SUM(a.DownloadEvent),
SUM(a.SearchEvent)
FROM
(TABLE_DATE_RANGE([xxxxxx.ga_sessions_], TIMESTAMP('2018-11-25'), TIMESTAMP('2018-11-25'))) AS b 
INNER JOIN (
SELECT 
clientId,
totals.timeOnSite, 
trafficSource.source,
COUNT(CASE WHEN (hits.eventInfo.eventCategory = 'Download' AND hits.type = 'EVENT' AND hits.eventInfo.eventAction = 'pdf') THEN hits.eventInfo.eventAction END) AS DownloadEvent,
COUNT(CASE WHEN (hits.eventInfo.eventLabel  = 'search-header' OR hits.eventInfo.eventLabel  = 'search-mainpage') AND hits.type = 'EVENT' THEN hits.eventInfo.eventLabel END) AS SearchEvent
FROM TABLE_DATE_RANGE([xxxxxx.ga_sessions_], TIMESTAMP('2018-11-25'), TIMESTAMP('2018-11-25'))
GROUP BY 1
) AS a ON b.clientId = a.clientId
GROUP BY 1,2,3

【讨论】:

@Julez2000,太棒了。不要犹豫,将其标记为已解决,以便遇到类似问题的任何人都可以轻松找到解决方案。

以上是关于BigQuery - 从 Google Analytics 导出不同的事件的主要内容,如果未能解决你的问题,请参考以下文章

将数据从 Google 永久磁盘加载到 BigQuery?

从 Google 表格获取数据到 BigQuery

从 Google 脚本将数据插入 BigQuery:遇到“”

ImportError:无法从“google.cloud”(未知位置)导入名称“bigquery”

`TFRecord` 从 Google BigQuery 转储到 Google Cloud Storage

Google Data Studio (BigQuery) 从 1 到 01