【问题标题】:Getting time series data when each day is a table (Google Analytics, Big Query)当每天都是一张表时获取时间序列数据(Google Analytics,Bigquery)
【发布时间】:2022-07-14 13:17:54
【问题描述】:
我在 Big Query 中有一些 Google Analytics 数据,其中数据集是不同的网站,表格是给定日期的会话。
所以以这个查询为例:
SELECT sum(totals.pageviews) as Pub1
FROM `ga_data.1010101010.ga_sessions_20220711`
在这个例子中:
- ga_data 是我的项目
- 1010101010 是我的数据集(单个出版物)
- ga_sessions_20220711 是 7 月的表格,11 个会话
因此,该查询为我提供了当天的总页面浏览量。我想知道的是两件事:
- 如何将此查询扩展到所有表的所有日期以获得每日总计?
- 如何将此查询扩展到所有数据集的所有网站上的所有每日总数?
感谢您的帮助。
【问题讨论】:
标签:
sql
google-bigquery
google-analytics
【解决方案1】:
请看下面的答案:
1.如何将此查询扩展到所有表的所有日期以获得每日总计?
您可以使用wildcard table 查询多个表:
SELECT sum(totals.pageviews) as Pub1
FROM `ga_data.1010101010.ga_sessions_202207*`;
输出:
2.如何将此查询扩展到所有网站上所有每日总数的所有数据集?
您可以将INFORMATION_SCHEMA.SCHEMATA 中的数据集设置为数组,然后使用IF 和EXECUTE IMMEDIATE 循环遍历数组
DECLARE schemas ARRAY<string>;
DECLARE query string;
DECLARE i INT64 DEFAULT 0;
DECLARE arrSize INT64;
SET schemas = ARRAY(select schema_name from INFORMATION_SCHEMA.SCHEMATA);
SET arrSize = ARRAY_LENGTH(schemas);
LOOP
IF i < arrSize THEN
SET query = CONCAT("SELECT * FROM `<your-project>.",schemas[OFFSET(i)],".*`");
EXECUTE IMMEDIATE query;
SET i = i + 1;
END IF;
END LOOP;
输出: