我被要求用javascript开发一个客户端应用程序来查询存储在BigQuery上的一些表,所以目前我已经掌握了查询语法。
我的架构包括以下字段:
download_speed: FLOAT
real_address: STRING
timestamp: INTEGER
upload_speed: FLOAT
[...]
我想找到不同日期聚合的平均上传和下载速度,并跟踪不同的IP,所以我写了这个查询:
SELECT LEFT( FORMAT_UTC_USEC(UTC_USEC_TO_DAY(timestamp*1000000)),10) as date_day,
AVG (download_speed)avg_download,
AVG (upload_speed)avg_upload,
real_address
FROM [xxxxxxxxxxxx:xxxxxxx.xxxx]
GROUP BY date_day, real_address
ORDER BY date_day ASC
这没关系,但结果是平的,我需要每天聚合平均速度,以便我可以在时间轴上绘制它们。一种可能是处理查询客户端返回的json,但是有很好的数据集和许多不同用户使用不同的地址(正如我们应该有的),这种方法对我来说听起来有点自杀。
所以我问自己是否有一种方法可以在一个字段中保存具有给定日期所有地址的数组。我想让这个元组结构返回:
+---------------+-------------------+--------------------+--------------------+
| date_day | avg_download | avg_upload | real_addr_list |
+---------------+-------------------+--------------------+--------------------+
| | | | 79.20.xx.xx, |
| 2013-01-13 | 510574.63 | 29599.92 | 151.46.xxx.xx, |
| | | | 151.70.xx.xx |
+---------------+-------------------+--------------------+--------------------+
这可能吗,或者我被迫在BigQuery之外处理结果?
提前感谢您的帮助。
答案 0 :(得分:2)
好的,我发现BigQuery支持GROUP_CONCAT('str')函数,具有以下用法:
将多个字符串连接成一个以逗号分隔的字符串, 而是像字符串的SUM()。将此与分组语句一起使用 str的字段名称,用于连接a中所有字符串值的列表 组成一个字符串
如果有人感兴趣,则查询为:
SELECT LEFT( FORMAT_UTC_USEC(UTC_USEC_TO_DAY(timestamp*1000000)),10) as date_day,
AVG (download_speed)avg_download,
AVG (upload_speed)avg_upload,
GROUP_CONCAT(real_address)as real_address_list
FROM [xxxxxxx:xxxxx.xxxxx]
GROUP BY date_day
ORDER BY date_day ASC
希望这对其他人也有用。