Timescale Cloud:性能、规模、企业级

自托管产品

MST

简介

对数据进行下采样,以可视化趋势,同时保留更少的数据点。下采样将一组值替换为一小得多的、能高度代表原始数据的集合。这对于绘图应用程序特别有用。

警告

此函数组包含一些实验性函数。实验性函数在未来版本中可能会更改或移除。我们不建议在生产环境中使用它们。实验性函数标有 Experimental 标签。

函数

asap_smooth
使用 ASAP 平滑算法对时间序列进行下采样
gp_lttb
实验性使用 Largest Triangle Three Buckets 方法对时间序列进行下采样,同时保留原始数据中的间隙
lttb
使用 Largest Triangle Three Buckets 方法对时间序列进行下采样
asap_smooth(
ts TIMESTAMPTZ,
value DOUBLE PRECISION,
resolution INT
) RETURNS Timevector

使用 ASAP 平滑算法 对数据进行下采样。该算法在最小化点之间的局部方差的同时,保留了输入数据的近似形状和较大趋势。

所需参数
名称类型描述
tsTIMESTAMPTZ每个数据点的时间戳
valueDOUBLE PRECISION每个时间戳的值
resolutionINT要返回的大致点数。决定了生成图表的水平分辨率。
返回
类型描述
asap_smoothTimevector一个对象,表示从起始时间开始以固定间隔出现的一系列值。可以使用 unnest 进行解包。有关更多信息,请参阅 timevectors 的文档。
示例

本示例使用一个名为 metrics 的表,其中包含 datereading 列。这些列包含在很长一段时间内累积的测量值。本示例获取这些数据并提供一个大约 10 个点的平滑表示,但仍显示任何异常读数:

SET TIME ZONE 'UTC';
CREATE TABLE metrics(date TIMESTAMPTZ, reading DOUBLE PRECISION);
INSERT INTO metrics
SELECT
'2020-1-1 UTC'::timestamptz + make_interval(hours=>foo),
(5 + 5 * sin(foo / 12.0 * PI()))
FROM generate_series(1,168) foo;
SELECT * FROM unnest(
(SELECT asap_smooth(date, reading, 8)
FROM metrics)
);
time | value
------------------------+---------------------
2020-01-01 01:00:00+00 | 5.3664814565722665
2020-01-01 21:00:00+00 | 5.949469264090644
2020-01-02 17:00:00+00 | 5.582987807518377
2020-01-03 13:00:00+00 | 4.633518543427733
2020-01-04 09:00:00+00 | 4.050530735909357
2020-01-05 05:00:00+00 | 4.417012192481623
2020-01-06 01:00:00+00 | 5.366481456572268
2020-01-06 21:00:00+00 | 5.949469264090643
gp_lttb(
ts TIMESTAMPTZ,
value DOUBLE PRECISION,
resolution INT
[, gapsize INTERVAL]
) RETURNS Timevector

使用 Largest Triangle Three Buckets 算法 对数据进行下采样,同时保留底层数据中的间隙。此方法是 LTTB 算法的特例。

所需参数
名称类型描述
tsTIMESTAMPTZ每个数据点的时间戳
valueDOUBLE PRECISION每个时间戳的值
resolutionINT要返回的大致点数。决定了生成图表的水平分辨率。
可选参数
名称类型描述
gapsizeINTERVAL用于分隔输入的最小间隙大小
返回
类型描述
gp_lttbTimevector一个对象,表示从起始时间开始以固定间隔出现的一系列值。可以使用 unnest 进行解包。有关更多信息,请参阅 timevectors 的文档。
示例

本示例使用一个包含以正弦波形式生成的原始数据的表,并从数据中间移除了一天。您可以使用保留间隙的 LTTB 对数据进行下采样,同时保留缺失区域的边界

SET TIME ZONE 'UTC';
CREATE TABLE metrics(date TIMESTAMPTZ, reading DOUBLE PRECISION);
INSERT INTO metrics
SELECT
'2020-1-1 UTC'::timestamptz + make_interval(hours=>foo),
(5 + 5 * sin(foo / 24.0 * PI()))
FROM generate_series(1,168) foo;
DELETE FROM metrics WHERE date BETWEEN '2020-1-4 UTC' AND '2020-1-5 UTC';
SELECT time, value
FROM unnest((
SELECT toolkit_experimental.gp_lttb(date, reading, 8)
FROM metrics))
time | value
-----------------------+-------------------
2020-01-01 01:00:00+00 | 5.652630961100257
2020-01-02 12:00:00+00 | 0
2020-01-03 23:00:00+00 | 5.652630961100255
2020-01-05 01:00:00+00 | 5.652630961100259
2020-01-05 13:00:00+00 | 9.957224306869051
2020-01-06 12:00:00+00 | 0
2020-01-07 10:00:00+00 | 9.82962913144534
2020-01-08 00:00:00+00 | 5.000000000000004
lttb(
ts TIMESTAMPTZ,
value DOUBLE PRECISION,
resolution INT
) RETURNS Timevector

使用 Largest Triangle Three Buckets 算法 对数据进行下采样。该算法旨在保持下采样数据与原始数据集之间的视觉相似性。

所需参数
名称类型描述
tsTIMESTAMPTZ每个数据点的时间戳
valueDOUBLE PRECISION每个时间戳的值
resolutionINT要返回的大致点数。决定了生成图表的水平分辨率。
返回
类型描述
lttbTimevector一个对象,表示从起始时间开始以固定间隔出现的一系列值。可以使用 unnest 进行解包。有关更多信息,请参阅 timevectors 的文档。
示例

本示例使用一个包含以正弦波形式生成的原始数据的表。您可以使用 LTTB 大幅减少点数,同时仍能捕捉到数据中的峰值和谷值

SET TIME ZONE 'UTC';
CREATE TABLE metrics(date TIMESTAMPTZ, reading DOUBLE PRECISION);
INSERT INTO metrics
SELECT
'2020-1-1 UTC'::timestamptz + make_interval(hours=>foo),
(5 + 5 * sin(foo / 24.0 * PI()))
FROM generate_series(1,168) foo;
SELECT time, value
FROM unnest((
SELECT lttb(date, reading, 8)
FROM metrics))
time | value
------------------------+---------------------
2020-01-01 01:00:00+00 | 5.652630961100257
2020-01-01 13:00:00+00 | 9.957224306869053
2020-01-02 11:00:00+00 | 0.04277569313094798
2020-01-03 11:00:00+00 | 9.957224306869051
2020-01-04 13:00:00+00 | 0.04277569313094709
2020-01-05 16:00:00+00 | 9.330127018922191
2020-01-06 20:00:00+00 | 2.4999999999999996
2020-01-08 00:00:00+00 | 5.000000000000004

关键词

在此页面发现问题?报告问题 或 编辑此页面 在 GitHub 上。