使用 time_bucket 并在 timescaledb 中连接多个表
Using time_bucket and joining multiple tables in timescaledb
我有一个带有几个 table 的简单数据库模式 (Timescaledb)。每个用户都有一个具有多个指标的主传感器,每个指标都有自己的 table,带有 user_id 和时间戳。
架构
Table 1
| user_id |时间戳 | val1 |瓦尔...
|:---- |:------:| -----:| -----:
Table ...
user_id
timestamp
val1
val...
问题
我想知道如何将这些 table 合并到具有 time_bucket
功能的视图中。所以,如果我每 10 秒采样一次以显示类似
查看
user_id
timestamp
agg val from table 1
agg val from table 2
agg val from table X
是的!有可能!
你可以用正则试试SQL。这是一些例子:
select time_bucket('1m', a.time) as bucket_a,
a.symbol || '/' || b.symbol as pair,
LAST(a.price, a.time) as last_price_a,
LAST(b.price, b.time) as last_price_b
FROM ticks a
LEFT JOIN ticks b
ON time_bucket('1m', a.time) = time_bucket('1m', b.time)
AND a.symbol = 'SYMBOL' and b.symbol = 'ANOTHER'
GROUP BY 1, 2;
请注意,我加入了 table ticks
两次,您可以加入另一个 table 和其他指标。
另一个细节是,它不是在 where 子句上过滤 symbol
,而是现在 JOIN
子句的一部分。
我有一个带有几个 table 的简单数据库模式 (Timescaledb)。每个用户都有一个具有多个指标的主传感器,每个指标都有自己的 table,带有 user_id 和时间戳。
架构
Table 1
| user_id |时间戳 | val1 |瓦尔... |:---- |:------:| -----:| -----: Table ...
user_id | timestamp | val1 | val... |
---|
问题
我想知道如何将这些 table 合并到具有 time_bucket
功能的视图中。所以,如果我每 10 秒采样一次以显示类似
查看
user_id | timestamp | agg val from table 1 | agg val from table 2 | agg val from table X |
---|
是的!有可能!
你可以用正则试试SQL。这是一些例子:
select time_bucket('1m', a.time) as bucket_a,
a.symbol || '/' || b.symbol as pair,
LAST(a.price, a.time) as last_price_a,
LAST(b.price, b.time) as last_price_b
FROM ticks a
LEFT JOIN ticks b
ON time_bucket('1m', a.time) = time_bucket('1m', b.time)
AND a.symbol = 'SYMBOL' and b.symbol = 'ANOTHER'
GROUP BY 1, 2;
请注意,我加入了 table ticks
两次,您可以加入另一个 table 和其他指标。
另一个细节是,它不是在 where 子句上过滤 symbol
,而是现在 JOIN
子句的一部分。