如何以分钟的精度从 BigQuery 绘制时间序列?
How to plot a time series from BigQuery with a minute accuracy?
我在 BigQuery 中有一个数据集,我将其用作在 Data Studio 上创建报告的来源。
我可以使用时间戳作为维度和我拥有的其他数字字段作为指标将数据绘制为时间序列/组合/折线图。
我遇到的问题是,我最多可以获得精确到小时的精度,而我需要一分钟的精度。 BigQuery中的数据集精确到毫秒,但我在Data Studio中似乎无法获取它。
我已经阅读了有关创建包含日期的字符串并将其用作度量标准或提取和组合分钟字段的简短建议,但我似乎无法使其工作。
您可以使用以下查询创建您 table 的视图:
SELECT
t.*,
FORMAT_TIMESTAMP("%Y-%m-%d %H:%M", t.timestamp) as date_time
FROM
`project-id.dataset-id.table-id` AS t
创建此类视图后,您可以将此视图添加为您的数据源,并将字段date_time
用于您的时间序列
2019 年更新:现在原生支持分钟分辨率!
在 BigQuery 中,TRUNCATE
通过 MINUTE
和 GROUP BY
它。然后在 Data Studio 中将此时间戳设置为 STRING
值而不是 DATE
。使用此时间戳 STRING
作为 X
维度创建折线图,瞧。
此vis的查询:
WITH data AS (
SELECT bus, ST_GeogPoint(longitude, latitude) point
, PARSE_TIMESTAMP('%Y%m%d %H%M%S',FORMAT('%i %06d', day, time)) ts
FROM `fh-bigquery.mta_nyc_si.201410_bustime`
WHERE day=20141014
AND bus IN (7043, 7086, 7076, 2421, 7052, 7071)
)
SELECT bus, TIMESTAMP_TRUNC(ts, MINUTE) ts, AVG(distance/time) speed
FROM (
SELECT bus, ts
, ST_DISTANCE(point, LAG(point, 3) OVER(PARTITION BY bus ORDER BY ts)) distance
, TIMESTAMP_DIFF(ts, LAG(ts, 3) OVER(PARTITION BY bus ORDER BY ts), SECOND) time
FROM data
)
WHERE time IS NOT null
GROUP BY bus, ts
HAVING speed < 500
我在 BigQuery 中有一个数据集,我将其用作在 Data Studio 上创建报告的来源。
我可以使用时间戳作为维度和我拥有的其他数字字段作为指标将数据绘制为时间序列/组合/折线图。
我遇到的问题是,我最多可以获得精确到小时的精度,而我需要一分钟的精度。 BigQuery中的数据集精确到毫秒,但我在Data Studio中似乎无法获取它。
我已经阅读了有关创建包含日期的字符串并将其用作度量标准或提取和组合分钟字段的简短建议,但我似乎无法使其工作。
您可以使用以下查询创建您 table 的视图:
SELECT
t.*,
FORMAT_TIMESTAMP("%Y-%m-%d %H:%M", t.timestamp) as date_time
FROM
`project-id.dataset-id.table-id` AS t
创建此类视图后,您可以将此视图添加为您的数据源,并将字段date_time
用于您的时间序列
2019 年更新:现在原生支持分钟分辨率!
在 BigQuery 中,TRUNCATE
通过 MINUTE
和 GROUP BY
它。然后在 Data Studio 中将此时间戳设置为 STRING
值而不是 DATE
。使用此时间戳 STRING
作为 X
维度创建折线图,瞧。
此vis的查询:
WITH data AS (
SELECT bus, ST_GeogPoint(longitude, latitude) point
, PARSE_TIMESTAMP('%Y%m%d %H%M%S',FORMAT('%i %06d', day, time)) ts
FROM `fh-bigquery.mta_nyc_si.201410_bustime`
WHERE day=20141014
AND bus IN (7043, 7086, 7076, 2421, 7052, 7071)
)
SELECT bus, TIMESTAMP_TRUNC(ts, MINUTE) ts, AVG(distance/time) speed
FROM (
SELECT bus, ts
, ST_DISTANCE(point, LAG(point, 3) OVER(PARTITION BY bus ORDER BY ts)) distance
, TIMESTAMP_DIFF(ts, LAG(ts, 3) OVER(PARTITION BY bus ORDER BY ts), SECOND) time
FROM data
)
WHERE time IS NOT null
GROUP BY bus, ts
HAVING speed < 500