如何开始TimescaleDB压缩作业?

时间:2020-07-03 16:48:57

标签: postgresql timescaledb

我已经将大量的历史数据加载到timescaledb表中。

CREATE TABLE quotes (
    "time" timestamp NULL,
    symbol_id int4 NULL,
    "open" numeric(14,6) NULL,
    "close" numeric(14,6) NULL,
    high numeric(14,6) NULL,
    low numeric(14,6) NULL,
    volume int8 NULL,
    CONSTRAINT quotes_ts_pkey PRIMARY KEY (symbol_id, "time")
);

SELECT create_hypertable('quotes', 'time', 'symbol_id', 1, create_default_indexes => false);

ALTER TABLE quotes SET (
  timescaledb.compress,
  timescaledb.compress_segmentby = 'symbol_id'
);

SELECT add_compress_chunks_policy('quotes', INTERVAL '7 days');

之后,我将数据插入到表中

insert into quotes ("time", data_id, "open", "close", high, low, volume)
select "time", symbol_id, "open", "close", high, low, volume
from source_schema.quotes;

然后我看到未压缩哪些数据。

SELECT * FROM timescaledb_information.compressed_chunk_stats 
ORDER BY compression_status, hypertable_name, chunk_name;

我还可以选择包含旧数据的块,这些块必须进行压缩(这是我的期望)。

SELECT show_chunks('quotes', older_than => INTERVAL '7 days');

如果我尝试压缩块,效果很好:

SELECT compress_chunk('_timescaledb_internal._hyper_1_59_chunk');

但是如何根据指定的策略启动内部timescaledb作业以自动压缩块?

1 个答案:

答案 0 :(得分:2)

“ SELECT add_compress_chunks_policy('quotes',INTERVAL'7 days');“应该对7天以上的任何块启动该自动化过程。 (也就是说,数据块的 end 必须存在> = 7天。)

您还可以查看压缩数据或后台工作程序任务的信息视图:

https://docs.timescale.com/latest/api#timescaledb_information-compressed_hypertable_stats https://docs.timescale.com/latest/api#timescaledb_information-compressed_chunk_stats https://docs.timescale.com/latest/api#timescaledb_information-policy_stats

根据您提供的信息不能完全确定为什么看不到压缩数据。在我们的社区slack.timescale.com的Slack频道上调试可能会更容易。干杯!