我已将Google Analytics的数据导出到Big Query。它现在有了ca. 14个月的数据,包含ca. 430米活动。我想运行一个查询来获取每月事件的总数(例如201701,201702等)。
我写了一个查询,但它只会在一段时间内运行。 4-6天。如果我把它做得更大,我会得到“在查询执行期间超出资源”。信息。以下是我的查询。在制定此查询时我在哪里出错了?或者我应该完全不同地处理这个问题(只是初学者......)
查询:
SELECT
MonthYear,
EXACT_COUNT_DISTINCT(combinedVisitorId) AS EventCount,
FROM (
SELECT
CONCAT(fullVisitorId,"-",STRING(visitId),"-",STRING(hits.hitNumber)) AS combinedVisitorId,
hits.eventInfo.eventCategory AS EventCategory,
CONCAT(CAST(YEAR(SEC_TO_TIMESTAMP(visitStartTime)) AS STRING), LPAD(CAST(MONTH(SEC_TO_TIMESTAMP(visitStartTime)) AS STRING), 2, '0')) AS MonthYear,
FROM
TABLE_DATE_RANGE([XXX:79296192.ga_sessions_], TIMESTAMP("2016-04-01"), TIMESTAMP("2017-05-30"))
WHERE
hits.type="EVENT" )
GROUP BY
MonthYear
ORDER BY
EventCount DESC
答案 0 :(得分:1)
尝试类似下面的内容 - 适用于BigQuery Standard SQL
#standardSQL
SELECT
YearMonth,
COUNT(DISTINCT combinedVisitorId) AS EventCount
FROM (
SELECT
SUBSTR(_TABLE_SUFFIX, 1, 6) AS YearMonth,
CONCAT(fullVisitorId,"-",STRING(visitId),"-",STRING(hits.hitNumber)) AS combinedVisitorId
FROM `XXX.79296192.ga_sessions_*`
WHERE _TABLE_SUFFIX BETWEEN "20160401" AND "20170530"
AND hits.type="EVENT"
)
GROUP BY YearMonth
-- ORDER BY EventCount DESC
注意:我为combinedVisitorId留下了逻辑,因为它假设这正是你想要对待访客的方式
此外,您可以将上面的内容组合到一个select语句中(不带子查询) - 但我这样写的方式是为了强调使用通配符的方法
答案 1 :(得分:1)
强烈建议您在BigQuery中使用Standard SQL版本。如果你想计算总事件,这可能适合你:
SELECT
SUM((SELECT COUNTIF(hits.type = 'EVENT') FROM UNNEST(hits) hits)) total_events,
FORMAT_DATE("%B", PARSE_DATE("%Y%m%d", date)) month
FROM `project_id.dataset_id.ga_sessions*`
WHERE
1 = 1
AND CASE WHEN (REGEXP_CONTAINS(_table_suffix, 'intraday') AND REGEXP_EXTRACT(_table_suffix, r'.*_(.*)') BETWEEN "20170606" AND "20170606" ) THEN TRUE
WHEN (NOT REGEXP_CONTAINS(_table_suffix, 'intraday') AND REGEXP_EXTRACT(_table_suffix, r'.*_(.*)') BETWEEN "20160605" AND "20170605") THEN TRUE END
GROUP BY month
我在这里测试了整整一年,它在大约30秒内处理完毕。请注意,如果您使用超过一年,那么数据将在同一个月内进行分组。