如何 repartition/refactor/ 减少 timescaleDB 中的块
how to repartition/refactor/ reduce chunks in timescale DB
目前,我有一个 10GB space 的 timescaleDB hyper table,但是,我已经将它分区为 1500 个块,在一台具有 32GB 内存的机器上,我意识到它太过分了。我想问一下将我的 hypertable 转换为块较少的 table 的正确方法是什么....
这就是我之前构建 table 的方式:
CREATE TABLE db_009a005a_df_downloaded_grand (
symbol VARCHAR(32),
timestamp TIMESTAMP WITH TIME ZONE NOT NULL,
volume DOUBLE PRECISION,
close DOUBLE PRECISION,
high DOUBLE PRECISION,
low DOUBLE PRECISION,
open DOUBLE PRECISION
)
;
SELECT create_hypertable('db_009a005a_df_downloaded_grand', 'timestamp','symbol',8);
我创建了一个新的 table 试图将数据迁移到
CREATE TABLE db_009a005a_df_downloaded_grand2 (
symbol VARCHAR(32),
timestamp TIMESTAMP WITH TIME ZONE NOT NULL,
volume DOUBLE PRECISION,
close DOUBLE PRECISION,
high DOUBLE PRECISION,
low DOUBLE PRECISION,
open DOUBLE PRECISION
)
;
SELECT create_hypertable('db_009a005a_df_downloaded_grand2', 'timestamp','symbol',1,chunk_time_interval => INTERVAL '3 years');
我可以吗?
INSERT INTO db_009a005a_df_downloaded_grand2
SELECT * FROM db_009a005a_df_downloaded_grand;
目前,TimescaleDB 不提供任何工具来将现有块转换为不同的块大小。所以有必要手动完成。我相信唯一的方法是创建具有所需块大小的新 hypertable,然后将数据从旧的 hypertable 复制到新的 hypertable。如有必要,在删除旧 table.
后重命名新 table
可以通过 CSV 文件完成复制以利用 Timescale's parallel copy tool。或者批量插入也不错,提高复制性能
目前,我有一个 10GB space 的 timescaleDB hyper table,但是,我已经将它分区为 1500 个块,在一台具有 32GB 内存的机器上,我意识到它太过分了。我想问一下将我的 hypertable 转换为块较少的 table 的正确方法是什么....
这就是我之前构建 table 的方式:
CREATE TABLE db_009a005a_df_downloaded_grand (
symbol VARCHAR(32),
timestamp TIMESTAMP WITH TIME ZONE NOT NULL,
volume DOUBLE PRECISION,
close DOUBLE PRECISION,
high DOUBLE PRECISION,
low DOUBLE PRECISION,
open DOUBLE PRECISION
)
;
SELECT create_hypertable('db_009a005a_df_downloaded_grand', 'timestamp','symbol',8);
我创建了一个新的 table 试图将数据迁移到
CREATE TABLE db_009a005a_df_downloaded_grand2 (
symbol VARCHAR(32),
timestamp TIMESTAMP WITH TIME ZONE NOT NULL,
volume DOUBLE PRECISION,
close DOUBLE PRECISION,
high DOUBLE PRECISION,
low DOUBLE PRECISION,
open DOUBLE PRECISION
)
;
SELECT create_hypertable('db_009a005a_df_downloaded_grand2', 'timestamp','symbol',1,chunk_time_interval => INTERVAL '3 years');
我可以吗?
INSERT INTO db_009a005a_df_downloaded_grand2
SELECT * FROM db_009a005a_df_downloaded_grand;
目前,TimescaleDB 不提供任何工具来将现有块转换为不同的块大小。所以有必要手动完成。我相信唯一的方法是创建具有所需块大小的新 hypertable,然后将数据从旧的 hypertable 复制到新的 hypertable。如有必要,在删除旧 table.
后重命名新 table可以通过 CSV 文件完成复制以利用 Timescale's parallel copy tool。或者批量插入也不错,提高复制性能