TimescaleDB:了解创建超表后的 return 值以及填充超表后创建块

TimescaleDB: Understanding the return values after creating hypertable and the creation of chunks after populating the hypertable

我的数据库中有一个名为 price 的现有 table(有 264 行),我将其转换为一个 hypertable price_hypertable 做:

CREATE TABLE price_hypertable (LIKE price INCLUDING DEFAULTS INCLUDING CONSTRAINTS EXCLUDING INDEXES);
SELECT create_hypertable('price_hypertable', 'start');

它给我的输出如下:

       create_hypertable       
-------------------------------
 (4,public,price_hypertable,t)
(1 row)

我接下来要做的是按如下方式填充 price_hypertable

insert into price_hypertable select * from price;

我得到了以下输出:

INSERT 0 264

现在,我想检查创建的区块,为此我做了:

select public.show_chunks('price_hypertable');

我得到的输出:

              show_chunks               
----------------------------------------
 _timescaledb_internal._hyper_4_3_chunk
 _timescaledb_internal._hyper_4_4_chunk
(2 rows)

当我这样做时:

select * from _timescaledb_internal._hyper_4_3_chunk;
select * from _timescaledb_internal._hyper_4_4_chunk ;

我看到264个条目拆分如下:

_timescaledb_internal._hyper_4_3_chunk 有 98 行 _timescaledb_internal._hyper_4_4_chunk 有 166 行

我对这些步骤及其输出有几个问题:

  1. 有人可以向我解释值 4t 代表什么吗? SELECT create_hypertable('price_hypertable', 'start');?
  2. 填充 price_hypertable 后,数据自动拆分为块,但大小不同。为什么会这样?为什么数据不只是分成两半(每个块中有 132 行,而不是 98 行和 166 行)?

感谢任何帮助。谢谢

与您的第二个问题相关:

当您未明确指定 chunk_time_interval 时,默认值为 7 天:请参阅 create-hypertable, Best Practices
因此每个块中的行数取决于您的数据分布(根据您的开始日期时间列)。

第一个问题,执行create_hypertable as

更容易看出它们代表什么
SELECT * FROM create_hypertable('price_hypertable', 'start');

这给出了类似的东西:

 hypertable_id | schema_name | table_name         | created 
---------------+-------------+--------------------+---------
             4 | public      | price_hypertable   | t

第二个问题,TmTron已经回答了。这是因为行是根据时间排序到桶中的,它们不一定是均匀间隔的。没有为每个桶选择正确间隔的自动化。

您可以在 API documentation on create_hypertable 中找到有关 return 值的信息,其中还讨论了可用于设置块大小的参数 chunk_time_interval