Join 连接两个或三个时间序列表的模式是什么;bigquery中的数据是什么?

Join 连接两个或三个时间序列表的模式是什么;bigquery中的数据是什么?,join,time-series,google-bigquery,Join,Time Series,Google Bigquery,我想看看是否可以在大查询中连接两个或三个大型表。它们都是时间序列数据,但频率不同。例如,流A可以每10秒发送一次,流B可以每分钟发送一次。我不知道如何连接这些表来查询它们的相同时间段。除了加入这些表的时间之外,还有一个业务键 我考虑过两种选择 在大查询中保存数据之前执行内存内聚合。这可能不是太糟糕,但我想我可能不得不使用ApacheStorm之类的项目,但仍然不是很清楚。手动缩放它们可能会很痛苦。这只是在每个流持久化到单个bigquery表中之前,对其最后一个已知值的查找 对这些数据流并行运行

我想看看是否可以在大查询中连接两个或三个大型表。它们都是时间序列数据,但频率不同。例如,流A可以每10秒发送一次,流B可以每分钟发送一次。我不知道如何连接这些表来查询它们的相同时间段。除了加入这些表的时间之外,还有一个业务键

我考虑过两种选择

  • 在大查询中保存数据之前执行内存内聚合。这可能不是太糟糕,但我想我可能不得不使用ApacheStorm之类的项目,但仍然不是很清楚。手动缩放它们可能会很痛苦。这只是在每个流持久化到单个bigquery表中之前,对其最后一个已知值的查找

  • 对这些数据流并行运行查询,然后在返回结果后进行聚合。如果返回的数据非常大,这可能会非常痛苦

有没有其他方法可以在查询本身中连接这些表?我是新来的大查询,所以我想知道我是否错过了任何技巧

比如说

如果流A是
tstamp:TIMESTAMP,device:STRING,lat:FLOAT,long:FLOAT
流B是
tstamp:TIMESTAMP,device:STRING,status:INTEGER
,数据看起来像

流A:

tstamp, device, lat, long
2015-02-12 06:13:00, A, 123.22, -1.22
2015-02-12 06:13:00, B, 121.11, -1.56
2015-02-12 06:13:10, A, 123.45, -1.23
2015-02-12 06:13:10, B, 121.11, -1.56
2015-02-12 06:13:20, A, 123.45, -1.26
2015-02-12 06:13:20, B, 121.11, -1.56
2015-02-12 06:13:30, A, 113.45, -1.23
B流:

tstamp, device, status
2015-02-12 06:12:20, A, 1
2015-02-12 06:13:20, A, 0
2015-02-12 06:12:58, B, 1
2015-02-12 06:14:20, A, 1
2015-02-12 06:13:59, B, 1
因此,当您查询设备A的06:13:00到06:13:30时,我希望看到以下数据

streamA.tstamp, device, lat, long, status
2015-02-12 06:13:00, A, 123.22, -1.22, 1
2015-02-12 06:13:10, A, 123.45, -1.23, 1
2015-02-12 06:13:20, A, 123.45, -1.26, 0
2015-02-12 06:13:30, A, 113.45, -1.23, 0
大多数情况下,如果没有时间连接两个数据流,则使用最后一个已知值

我不知道如何连接这些表来同时查询它们 句号

使用模向上/向下取整到最接近的单位,例如:10秒。 时间戳存储为unixtimestamp,因此您可以使用以下内容:

res = 1424170343 - (1424170343 % 10)
这将四舍五入到最接近的10秒


然后,这两个表都将被规范化为您的单元,因此您可以在同一时间+业务逻辑上进行连接,并使用聚合函数选择您感兴趣的表。

虽然您所描述的非常好,但使用窗口函数很可能可以做到,但您能否发布示例数据集和预期的查询输出来指导您better@Pentium10我用一些无用的数据更新了这个问题,以进一步解释我的问题。请让我知道,如果你需要任何进一步的澄清。我将看看窗口函数,看看它能做什么。@Pentium 10,我可以看出LAG函数可能是我需要研究的,但我不确定在连接两个表时如何使用它。@Pentium10您对上面的数据集满意吗,或者您还需要更多的示例吗?这可以在查询本身中完成,还是会为每个表(流)分别向表中添加
res
列并在添加数据时填充它?