文档

时序元数据管理函数

更新时间:
一键部署

为时序元数据表添加额外分区列。新的分区列既可以按照区间分区,也可以通过哈希分区。

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。

执行add_dimension()函数时, number_partitions或chunk_time_interval 必须选择一个。前者通过哈希分区,后者根据时间范围分区。

chunk_time_interval选择:

  • 如果分区列是TIMESTAMP、TIMESTAMPTZ或者DATE类型, 那么chunk_time_interval代表以毫秒为单位的时长。

  • 如果分区列是整型,那么chunk_time_interval按照整型数值计数。

示例:

以时间列为分区列,为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);

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。

注意 :在大数据量的情况下使用 migrate_data 迁移数据时,会长时间锁表。

drop_chunks()

删除数据块。数据块是指某个时间段内的数据 。使用 older_than 参数时,数据块的结束时间早于指定时间戳时会被删除。使用 newer_than 参数时,数据块的结束时间新于指定时间戳时会被删除。

必选参数

以下参数至少二选一。

Name

Description

older_than

早于指定时间点的数据块被删除。

newer_than

新于指定时间点的数据块被删除。

Optional Arguments

Name

Description

table_name

删除数据块的时序元数据表表名;不指定时,所有时序元数据表的数据块都会被删除。

schema_name

时序元数据表所在的schema值,缺省值public。

cascade

布尔值,设置成true时,删除数据块的同时也删除其依赖对象,缺省值 false。

older_than 和 newer_than 参数可以用以下2种方式表示:

  • 区间类型:时间段是指 now() - older_than 或者now() - newer_than。当时间列不是TIMESTAMP, TIMESTAMPTZ, or DATE类型时,返回错误。

  • 时间戳,天,整型:TIMESTAMP / TIMESTAMPTZ / DATE 类型或者 SMALLINT / INT / BIGINT等数值类型. 类型需要和时序元数据表的时间列类型一致。

当两者同时使用时,函数返回两者的交集。例如,当出现newer_than => 4 months and older_than => 3 months时,所有介于两者之间的数据块都会被删除掉。同样出现 newer_than => ‘2017-01-01’ and older_than => ‘2017-02-01’ 会删除介于’2017-01-01’ 和 ‘2017-02-01’的所有数据块. 如果2个时间段没有交集,则报错。

示例:

删除早于3个月的所有数据块:

SELECT drop_chunks(interval '3 months');

期望输出:

drop_chunks  
-------------
(1 row)

删除未来3个月的数据块。校订数据时非常有用:

SELECT drop_chunks(newer_than => now() + interval '3 months');

删除conditions 时序元数据表上早于3个月的数据块:

SELECT drop_chunks(interval '3 months', 'condition');

删除conditions 时序元数据表上早于2017年的数据块:

SELECT drop_chunks('2017-01-01'::date, 'conditions');

删除conditions 时序元数据表上早于2017年的数据块,时间以毫秒为单位:

SELECT drop_chunks(1483228800000, 'conditions');

删除conditions 时序元数据表上早于3个月的数据块,同时删除数据块的以来对象:

SELECT drop_chunks(interval '3 months', 'conditions', cascade => TRUE);

删除新于未来3个月的所有数据块:

SELECT drop_chunks(newer_than => interval '3 months');

删除早于3个月新于4个月的所有数据块:

SELECT drop_chunks(older_than => interval '3 months', newer_than => interval '4 months', table_name => 'conditions')

set_chunk_time_interval()

设置时序元数据表数据块的时间间隔。设置后新生成的数据块使用新值,已有数据块不受影响。

必选参数

Name

Description

main_table

时序元数据表表名。

chunk_time_interval

数据块覆盖的时间区间,需大于0。

可选参数

Name

Description

dimension_name

时间分区名,有且只有当时序元数据表有多个分区时使用。

chunk_time_interval 可以是如下类型

  • TIMESTAMP, TIMESTAMPTZ, DATE:比如区间类型(interval ‘1 day’)

  • INTEGER:整型值

示例:

把conditions表的数据块区间设置成24小时,分区键是TIMESTAMP类型。

SELECT set_chunk_time_interval('conditions', interval '24 hours');
SELECT set_chunk_time_interval('conditions', 86400000000);

把conditions表的数据块区间设置成24小时,分区键是 UNIX 时间类型24 hours。

SELECT set_chunk_time_interval('conditions', 86400000);

set_number_partitions()

设置时序元数据表的分区个数。

必选参数

Name

Description

main_table

时序元数据表表名。

number_partitions

分区数量,值范围: 0 到 32768之间。

可选参数

Name

Description

dimension_name

时间主分区外的其它分区键名。有且只有时序元数据表有多个分区键时使用。

number_partitions

分区数量,值范围: 0 到 32768之间。

示例:

单分区表实例:

SELECT set_number_partitions('conditions', 2);

多分区表实例:

SELECT set_number_partitions('conditions', 2, 'device_id');

show_chunks()

显示时序元数据表的关联数据块。

可选参数

Name

Description

hypertable

拥有数据块的时序元数据表名;如果不指定,则显示所有时序元数据表的数据块。

older_than

早于指定时间点的数据块被删除。

newer_than

新于指定时间点的数据块被删除。

older_than 和 newer_than 参数可以用以下2中方式表示:

  • 区间类型:区间是指 now() - older_than 或者now() - newer_than。如果时间列不是TIMESTAMP, TIMESTAMPTZ, or DATE类型,返回错误。

  • 时间戳,天,整型:TIMESTAMP / TIMESTAMPTZ / DATE 类型或者 SMALLINT / INT / BIGINT等数值类型. 类型需要和时序元数据表的时间列类型一致。

当两者同时使用时,函数返回两者的交集。例如,当出现newer_than => 4 months and older_than => 3 monthsW时,所有介于两者之间的数据块都会被删除掉。同样出现 newer_than => ‘2017-01-01’ and older_than => ‘2017-02-01’ 会删除介于’2017-01-01’ 和 ‘2017-02-01’的所有数据块. 如果2个时间段没有交集,则报错。

示例:

显示所有数据块。当没有创建表时,返回0.

SELECT show_chunks();

期望输出:

show_chunks  
---------------------------------------
 _timescaledb_internal._hyper_1_10_chunk
 _timescaledb_internal._hyper_1_11_chunk
 _timescaledb_internal._hyper_1_12_chunk
 _timescaledb_internal._hyper_1_13_chunk
 _timescaledb_internal._hyper_1_14_chunk
 _timescaledb_internal._hyper_1_15_chunk
 _timescaledb_internal._hyper_1_16_chunk
 _timescaledb_internal._hyper_1_17_chunk
 _timescaledb_internal._hyper_1_18_chunk

显示关联表的所有数据块:

SELECT show_chunks('conditions');

显示早于3个月的所有数据块:

SELECT show_chunks(older_than => interval '3 months');

显示未来三个月的所有数据块。当时间出错时非常有用:

SELECT show_chunks(newer_than => now() + interval '3 months');

显示conditions时序元数据表上早于3个月的所有数据块:

SELECT show_chunks('conditions', older_than => interval '3 months');

显示conditions 时序元数据表上早于2017年的数据块:

SELECT show_chunks('conditions', older_than => '2017-01-01'::date);

显示新于3个月的数据块:

SELECT show_chunks(newer_than => interval '3 months');

显示早于3个月新于4个月的所有数据块:

SELECT show_chunks(older_than => interval '3 months', newer_than => interval '4 months');
  • 本页导读 (1)
文档反馈