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 行
我对这些步骤及其输出有几个问题:
- 有人可以向我解释值
4
和 t
代表什么吗?
SELECT create_hypertable('price_hypertable', 'start');
?
- 填充
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
。
我的数据库中有一个名为 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 行
我对这些步骤及其输出有几个问题:
- 有人可以向我解释值
4
和t
代表什么吗?SELECT create_hypertable('price_hypertable', 'start');
? - 填充
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
。