时序元数据管理函数
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, or 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', 'conditions');
删除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 到 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');
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');
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论