postgresql数据库 TimescaleDB 时序库 API 函数介绍
(未完待续)
文章目录
一 show_chunks() 查看分区块
查看分区块
获取与超表关联的块列表。
可选参数
Name | Description |
---|---|
hypertable | 拥有数据块的时序元数据表名;如果不指定,则显示所有时序元数据表的数据块 |
older_than | 显示任何比此时间戳更早的完整块 |
newer_than | 显示任何比此时间戳更晚的完整块 |
select show_shunks();
--查看所有块
select show_shunks('超表名');
--查看某个超表底下的所有块
SELECT show_chunks(older_than => INTERVAL '10 days', newer_than => INTERVAL '20 days');
-- 查询10天到20天的的块
二 drop_chunks() 删除分区块
删除分区块
删除时间范围完全落在指定时间之前(或之后)的数据块,可以跨所有超表操作,也可以针对特定的超表操作。显示以与show_chunks函数相同的样式删除的块的列表。
所需的参数
函数至少需要以下参数之一。这些参数具有与show_chunks函数相同的语义。
Name | Description |
---|---|
hypertable | 超表或连续聚合,从其中删除块。 |
older_than | 删除任何比此时间戳更早的完整块 |
newer_than | 删除任何比此时间戳更晚的完整块 |
可选参数
Name | Description |
---|---|
schema_name | 要从中删除块的超表的模式名。默认为public |
cascade | 是否在块上级联删除,因此删除要删除的块上的依赖对象。默认值为FALSE。 |
cascade_to_materializations | 设置为TRUE也可以从任何关联的连续聚合中删除块数据。设置为FALSE表示只删除原始块(同时保持数据在连续聚合中)。默认为NULL,如果存在连续聚合,则会错误。 |
SELECT drop_chunks(newer_than => now() + INTERVAL '3 months', table_name => '超表名');
--删除超表名上超过3个月的块。
SELECT drop_chunks('2020-01-01'::DATE, 'conditions');
--删除2020年1月1日之前的块
SELECT drop_chunks(interval '3 months');
--删除所有3个月块
SELECT drop_chunks(older_than => interval '3 months', newer_than => interval '4 months', table_name => 'cs')
--删除超表cs上的所有比3个月前旧的和比4个月前新的块:
三 create_hypertable() 创建超表
创建超表 ,时序元数据表默认以时间列分区。同时具备按照多列组合分区能力。ALTER TABLE, SELECT 均可以操作时序元数据表。
必选参数
Name | Description |
---|---|
main_table | 时序元数据表关联的物理表 |
time_column_name | 包含时间的主分区列 |
可选参数
Name | Description |
---|---|
partitioning_column | 附加分区列,与 number_partitions配合使用 |
number_partitions | 附加分区 partitioning_column 分区个数,需大于 0 |
chunk_time_interval | 分区覆盖时间范围,需大于0,缺省值7天 |
create_default_indexes | 布尔值,用来确定是否在分区列上创建缺省索引缺省为 TRUE |
if_not_exists | 布尔值,用来确定当时序元数据表已经创建时,是否打印告警信息。缺省值FALSE |
partitioning_func | 分区计算函数 |
associated_schema_name | 时序元数据表内部名称 |
associated_table_prefix | 内部表分区前缀名,缺省值 “_hypter” |
migrate_data | 布尔值,设置成true时,把main_table数据迁移到新的时序元数据表的分区数据块中,缺省值 false |
返回值
Column | Description |
---|---|
hypertable_id | 时空数据库内部记录的时序元数据表ID |
schema_name | 时序元数据表Schema 名 |
table_name | 时序元数据表表名 |
created | 时序元数据表创建成功,返回true;创建失败且if_not_exists 设置成true,返回false |
实例
将表conditions转换为超表,只在列time上进行时间分区:
SELECT create_hypertable('conditions', 'time');
将表condition转换为超表,将列time设置分区 每24小时为一个分区。
SELECT create_hypertable('conditions', 'time', chunk_time_interval => 86400000000);
SELECT create_hypertable('conditions', 'time', chunk_time_interval => INTERVAL '1 day');
四 add_dimension() 添加额外的分区
添加额外的分区,新的分区列既可以按照区间分区,也可以通过哈希分区
注意: add_dimension 命令只能在时序元数据表创建后执行
必选参数
Name | Description |
---|---|
main_table | 添加新分区的时序元数据表 |
column_name | 分区列名 |
可选参数
Name | Description |
---|---|
number_partitions | column_name列的分区个数,需大于 0 |
chunk_time_interval | 每个分区覆盖范围需大于 0 |
partitioning_func | 分区计算函数(见 create_hypertable ) |
if_not_exists | 布尔值,用来确定当时序元数据表已经创建时,是否打印告警信息,缺省值FALSE |
返回值
Column | Description |
---|---|
dimension_id | 时序数据库内部记录的时序元数据表ID |
schema_name | 时序元数据表Schema 名 |
table_name | 时序元数据表表名 |
column_name | 分区列列名 |
created | 时序元数据表创建成功,返回true;创建失败且if_not_exists 设置成true,返回false。 |
实例
以时间列为分区列,为conditions 表创建时序元数据表。然后为以location列为分区键,为时序元数据表添加额外的分区
SELECT create_hypertable('conditions', 'time');
SELECT add_dimension('conditions', 'location', number_partitions => 4);
以时间列为分区列,为conditions 表创建时序元数据表。添加额外分区列time_received, 分区间隔为1天。再添加额外分区列device_id。
SELECT create_hypertable('conditions', 'time', 'location', 2);
SELECT add_dimension('conditions', 'time_received', chunk_time_interval => INTERVAL '1 day');
SELECT add_dimension('conditions', 'device_id', number_partitions => 2);
SELECT add_dimension('conditions', 'device_id', number_partitions => 2, if_not_exists => true);
五 set_chunk_time_interval() 修改分区时间(范围)
设置超表数据块的时间间隔。设置后新生成的数据块使用新值,已有数据块不受影响。
必选参数
Name | Description |
---|---|
main_table | 时序元数据表表名 |
chunk_time_interval | 数据块覆盖的时间区间,需大于 0 |
可选参数
Name | Description |
---|---|
dimension_name | 时间分区名,有且只有当时序元数据表有多个分区时使用 |
把超表 分区改为24小时一分区
SELECT set_chunk_time_interval('超表名', interval '24 hours');
SELECT set_chunk_time_interval('conditions', 86400000000);
-- TIMESTAMP类型
六 set_number_partitions() 修改分区空间 (范围)
设置超表上空间维度的分区(片)数量。新的分区只影响新的块。
必选参数
Name | Description |
---|---|
main_table | 时序元数据表表名 |
number_partitions | 分区数量,值范围: 0 到 32,768之间 |
可选参数
Name | Description |
---|---|
dimension_name | 时间主分区外的其它分区键名。有且只有时序元数据表有多个分区键时使用。 |
number_partitions | 分区数量,值范围: 0 到 32,768之间 |
实例
对于只有一个空间维度的表
SELECT set_number_partitions('conditions', 2);
对于有多个空间维度的表:
SELECT set_number_partitions('conditions', 2, 'device_id');
七 compress_chunk() 压缩函数
compress_chunk函数用于压缩特定的块。当用户想要更多地控制压缩调度时,最常用这个函数来代替add_compression_policy函数
必选参数
Name | Description |
---|---|
chunk_name | 要压缩的块的名称 |
可选参数
Name | Description |
---|---|
if_not_compressed | 设置为true将跳过已经压缩的块。默认值为false。 |
实例
压缩快
SELECT compress_chunk('_timescaledb_internal._hyper_1_2_chunk');