TimescaleDB: понимание возвращаемых значений после создания гипертаблицы и создания фрагментов после заполнения гипертаблицы. - PullRequest
3 голосов
/ 30 апреля 2020

У меня есть существующая таблица в моей базе данных с именем price (имеет 264 строки), и я преобразовал ее в гипертаблицу 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. Может кто-нибудь объяснить мне, что означают значения 4 и t, когда я сделал SELECT create_hypertable('price_hypertable', 'start');?
  2. После заполнения price_hypertable данные были автоматически разбивается на куски, но разного размера. Почему это происходит? Почему данные не были разделены пополам (132 строки в каждом чанке вместо 98 и 166)?

Любая помощь приветствуется. Спасибо

Ответы [ 2 ]

2 голосов
/ 30 апреля 2020

Для первого вопроса легче увидеть, что они представляют, выполнив create_hypertable как

SELECT * FROM create_hypertable('price_hypertable', 'start');

Это дает что-то вроде:

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

Для второго вопроса: TmTron уже ответил. Это связано с тем, что строки сортируются в сегменты в зависимости от времени и не обязательно располагаются равномерно. Не существует автоматизации, которая выбирает правильный интервал для каждого сегмента.

Информацию о возвращаемых значениях можно найти в документации API по create_hypertable, в которой также обсуждается параметр chunk_time_interval, который можно использовать для установки размера чанка.

1 голос
/ 30 апреля 2020

относится к вашему второму вопросу:

Если вы не укажете chunk_time_interval явно, по умолчанию будет 7 дней: см. create-hypertable , Best Practices .
Таким образом, количество строк в каждом чанке зависит от распределения ваших данных (согласно столбцу даты и времени начала).

...