全部产品
云市场

时序元数据管理函数

更新时间:2019-07-08 18:09:58

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列为分区键,为时序元数据表添加额外的分区。

  1. SELECT create_hypertable('conditions', 'time');
  2. SELECT add_dimension('conditions', 'location', number_partitions => 4);

以时间列为分区列,为conditions 表创建时序元数据表。添加额外分区列time_received, 分区间隔为1天。再添加额外分区列device_id。

  1. SELECT create_hypertable('conditions', 'time', 'location', 2);
  2. SELECT add_dimension('conditions', 'time_received', chunk_time_interval => interval '1 day');
  3. SELECT add_dimension('conditions', 'device_id', number_partitions => 2);
  4. 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个月的所有数据块:

  1. SELECT drop_chunks(interval '3 months');

期望输出:

  1. drop_chunks
  2. -------------
  3. (1 row)

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

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

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

  1. SELECT drop_chunks(interval '3 months', 'conditions');

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

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

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

  1. SELECT drop_chunks(1483228800000, 'conditions');

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

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

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

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

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

  1. 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类型。

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

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

  1. 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之间

示例:

单分区表实例:

  1. SELECT set_number_partitions('conditions', 2);

多分区表实例:

  1. 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.

  1. SELECT show_chunks();

期望输出:

  1. show_chunks
  2. ---------------------------------------
  3. _timescaledb_internal._hyper_1_10_chunk
  4. _timescaledb_internal._hyper_1_11_chunk
  5. _timescaledb_internal._hyper_1_12_chunk
  6. _timescaledb_internal._hyper_1_13_chunk
  7. _timescaledb_internal._hyper_1_14_chunk
  8. _timescaledb_internal._hyper_1_15_chunk
  9. _timescaledb_internal._hyper_1_16_chunk
  10. _timescaledb_internal._hyper_1_17_chunk
  11. _timescaledb_internal._hyper_1_18_chunk

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

  1. SELECT show_chunks('conditions');

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

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

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

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

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

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

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

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

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

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

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

  1. SELECT show_chunks(older_than => interval '3 months', newer_than => interval '4 months');