Timescale 自动支持 INSERT 到压缩数据块中。但是,如果您需要插入大量数据,例如作为批量回填操作的一部分,您应该首先解压缩数据块。将数据插入压缩数据块比插入未压缩数据块的计算成本更高。当数据行数很多时,这种成本会累加。

重要提示

当压缩数据时,您可以减少 Timescale 实例的存储空间量。但是,您应始终保留一些额外的存储容量。这使您可以灵活地在必要时解压缩数据块,以执行批量插入等操作。

本节介绍用于解压缩数据块的命令。您可以按时间筛选以选择要解压缩的数据块。

在解压缩数据块之前,请停止要解压缩的超表上的任何压缩策略。完成回填或更新数据后,重新开启策略。数据库会在下一个计划作业中自动重新压缩您的数据块。有关如何使用 alter_job() 函数停止和运行压缩策略的更多信息,请参阅 API 参考

有几种方法可以选择和解压缩数据块。

要按名称解压缩单个数据块,请运行以下命令

SELECT decompress_chunk('_timescaledb_internal.<chunk_name>');

其中,<chunk_name> 是您要解压缩的数据块的名称。

要根据时间范围解压缩一组数据块,您可以使用 show_chunks 的输出来解压缩每个数据块

SELECT decompress_chunk(c, true)
FROM show_chunks('table_name', older_than, newer_than) c;

有关 decompress_chunk 函数的更多信息,请参阅 decompress_chunk API 参考

如果您想使用更精确的匹配约束,例如空间分区,您可以构建如下命令

SELECT tableoid::regclass FROM metrics
WHERE time = '2000-01-01' AND device_id = 1
GROUP BY tableoid;
tableoid
------------------------------------------
_timescaledb_internal._hyper_72_37_chunk

关键词

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