Tengo una tabla existente en mi base de datos llamada price (tiene 264 filas) y la convertí en una hipertable price_hypertable haciendo:

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

Y el resultado que me dio es el siguiente:

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

Lo siguiente que hice fue completar el price_hypertable de la siguiente manera:

insert into price_hypertable select * from price;

Y obtuve el siguiente resultado:

INSERT 0 264

Ahora, quería comprobar los fragmentos creados, para lo cual hice:

select public.show_chunks('price_hypertable');

Y la salida que obtuve:

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

Cuando lo hago:

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

Veo que las 264 entradas se dividen de la siguiente manera:

_timescaledb_internal._hyper_4_3_chunk tiene 98 filas _timescaledb_internal._hyper_4_4_chunk tiene 166 filas

Tengo algunas preguntas sobre estos pasos y sus resultados:

  1. ¿Puede alguien explicarme qué representan los valores 4 y t, cuando lo hice SELECT create_hypertable('price_hypertable', 'start');?
  2. Después de completar price_hypertable, los datos se dividieron automáticamente en fragmentos, pero de diferente tamaño. ¿Por qué pasó esto? ¿Por qué los datos no se dividieron por la mitad (132 filas en cada fragmento en lugar de 98 y 166)?

Cualquier ayuda es apreciada. Gracias

3
Junkrat 30 abr. 2020 a las 12:50

2 respuestas

La mejor respuesta

Para la primera pregunta, es más fácil ver qué representan ejecutando create_hypertable como

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

Esto da algo como:

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

Para la segunda pregunta, TmTron ya respondió. Esto se debe a que las filas se ordenan en cubos según el tiempo, y no están necesariamente espaciadas de manera uniforme. No hay automatización que elija el intervalo correcto para cada segmento.

Puede encontrar información sobre los valores de retorno en la documentación de la API en create_hypertable que también discuten el parámetro chunk_time_interval que se puede usar para establecer el tamaño del fragmento.

2
Mats Kindahl 30 abr. 2020 a las 13:43

Relacionado con su segunda pregunta:

Cuando no especifica el chunk_time_interval explícitamente, el valor predeterminado es 7 días: consulte create -hipertable, Mejores prácticas.
Por lo tanto, el número de filas en cada fragmento depende de la distribución de sus datos (de acuerdo con su columna de fecha y hora de inicio).

1
TmTron 30 abr. 2020 a las 10:52