postgresql数据库 TimescaleDB 时序库 API 函数介绍

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');

猜你喜欢

转载自blog.csdn.net/yang_z_1/article/details/112779733