時序數據庫操作


轉載

創建時序數據庫hypertable

1、創建一個標准表(PostgreSQL docs)。

 

CREATE TABLE conditions (

 time        TIMESTAMPTZ       NOT NULL,

 location    TEXT              NOT NULL,

 temperature DOUBLE PRECISION  NULL

);

2.轉換為hypertable(執行TimescaleDB 命令)

首先將表轉換conditions為hypertable,僅對column進行時間分區time,然后在location四個分區上添加一個額外的分區鍵:

#將普通表轉換為時序表(對時間進行分區)
SELECT create_hypertable('conditions', 'time');

SELECT create_hypertable('conditions', 'time', chunk_time_interval => INTERVAL '1 day');
#或則可以給時間塊添加時間間隔,默認為7天(1.5版本以前為30天)
SELECT add_dimension('conditions', 'time', chunk_time_interval => INTERVAL '1 day');

 

#重新設置時間分區間隔,只會對新創建的分區生效
SELECT set_chunk_time_interval('conditions', INTERVAL '24 hours');

SELECT set_chunk_time_interval('conditions', 86400000000);

SELECT set_chunk_time_interval('conditions', 86400000); #unix是毫秒

 

另外也可以添加空間分區

#直接創建

SELECT create_hypertable('conditions', 'time', 'location', 4); #添加4個空間分區,根據location划分分區

#若hypertable已存在,可以采用 add_dimension直接進行添加,number_partitions為空間分區的個數,必須指定

SELECT create_hypertable('conditions', 'time');

SELECT add_dimension('conditions', 'location', number_partitions => 4);

#重新設置空間分區,只會對新創建的分區生效

SELECT set_number_partitions('conditions', 2);#單個維度

SELECT set_number_partitions('conditions', 2, 'device_id'); #多個維度

創建索引

#創建索引(索引可以針對塊進行事物,而不是整個hypertable)

CREATE INDEX ON conditions(time, location) USING brin
  WITH (timescaledb.transaction_per_chunk);

 

批量刪除

drop_chunks()

刪除時間范圍完全落在指定時間之前(或之后)的數據塊,(不同與delete,直接刪除磁盤文件也會清除)
older_than 截止點的規范,所有早於此時間戳的完整塊都應刪除。
table_name 從中刪除塊的hypertable或連續聚合。
newer_than 截止點的規范,所有比此時間戳新的完整塊都應刪除。

可選參數
cascade 數據級聯,默認為FALSE

實例

#保留最近三個月以內的數據

SELECT drop_chunks(INTERVAL '3 months', 'conditions');

#刪除早於三個月以前的所有數據,包括相關對象(例如,視圖):

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

#刪除,前四個月到前三個月之間的數據

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

#刪除超過未來三個月的數據

SELECT drop_chunks(newer_than => now() + INTERVAL '3 months', table_name => 'conditions');

#刪除2017年之前所有的數據

SELECT drop_chunks(DATE '2017-01-01', 'conditions');

SELECT drop_chunks(1483228800000, 'conditions'); # 時間戳操作也可以

 

查看當前塊

show_chunks()

hypertable 從中選擇塊的hypertable名稱。如果未提供,則顯示所有塊。
older_than 截止點的規范,應在該截止點處顯示所有早於此時間戳的完整塊。
newer_than 截止點的規范,其中應顯示比此時間戳新的完整塊。

實例

#查看所有的塊

SELECT show_chunks();

#獲取與表關聯的所有塊

SELECT show_chunks('conditions');

#獲取近三個月的所有塊

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

自動化策略

add_drop_chunks_policy()

創建刪除策略,使用后會返回一個job_id(整形),每個hypertable只能存在一個刪除策略。

#創建策略 只保留保留最近七天的數據(直接刪除塊)

SELECT add_drop_chunks_policy('conditions', INTERVAL '6 months');

刪除策略

remove_drop_chunks_policy()

刪除特定超級表的塊的策略。

#傳入要刪除策略的表名
SELECT remove_drop_chunks_policy('conditions');

alter_job_schedule()

計划任務,定時任務執行,引導job_id,
#設置表策略(更新也是這個),job_id為策略返回的job_id

示例

# 設置策略 每兩天運行一次排序策略 #另外有批量刪除策略(drop_chunks_policies)

SELECT alter_job_schedule(job_id, schedule_interval => INTERVAL '2 days')

FROM timescaledb_information.reorder_policies  

WHERE hypertable = 'conditions'::regclass;

#conditions_agg視圖的連續聚合作業,使其每五分鍾運行一次

SELECT alter_job_schedule(job_id, schedule_interval => INTERVAL '5 minutes')

FROM timescaledb_information.continuous_aggregate_stats

WHERE view_name = 'conditions_agg'::regclass;

#job_id 1015 指定下一次作業(2020年3月15日上午9:00:00)開始

SELECT alter_job_schedule(1015, next_start => '2020-03-15 09:00:00.0+00');

查看當前設置的所有策略

timescaledb_information.drop_chunks_policies

顯示有關由用戶創建的drop_chunks策略的信息

顯示字段表述

字段名

描述

hypertable

(REGCLASS)應用策略的超級表的名稱

older_than

(間隔)運行該策略時,將丟棄比此時間長得多的塊

cascade

(布爾值)是否在級聯選項打開的情況下運行策略,這將導致依賴對象以及塊被丟棄。

job_id

(INTEGER)為實施drop_chunks策略而設置的后台作業的ID

schedule_interval

(間隔)作業運行的間隔

max_runtime

(間隔)后台作業調度程序在停止作業之前將允許其運行的最長時間

max_retries

(整數)如果作業失敗,將重試該作業的次數

retry_period

(間隔)調度程序在兩次失敗重試之間等待的時間

示例

SELECT * FROM timescaledb_information.drop_chunks_policies; # 查詢策略
 
 hypertable |  older_than   | cascade | job_id | schedule_interval | max_runtime | max_retries | retry_period | cascade_to_materializations
------------+---------------+---------+--------+-------------------+-------------+-------------+--------------+-----------------------------
 conditions | (t,"7 days",) | t       |   1011 | 1 day             | 00:05:00    |          -1 | 00:05:00     | f
 

 


查詢策略狀態

timescaledb_information.policy_stats

顯示有關為管理數據保留以及hypertable上其他管理任務而創建的策略的信息和統計信息

顯示字段表述

字段名

描述

hypertable

(REGCLASS)應用策略的超級表的名稱

job_id

(INTEGER)為實施策略而創建的后台作業的ID

job_type

(文本)創建作業以實施的策略類型

last_run_success

(布爾值)上次運行成功還是失敗

last_finish

上次運行結束的時間

last_start

上次運行開始的時間

next_start

下一次運行的時間

total_runs

(整數)此作業的運行總數

total_failures

(整數)此作業失敗的總次數

示例

SELECT * FROM timescaledb_information.policy_stats; #查詢當前策略狀態
 
#結果
hypertable | job_id |  job_type   | last_run_success |          last_finish          |    last_successful_finish     |          last_start           |          next_start           | total_runs | total_failures
------------+--------+-------------+------------------+-------------------------------+-------------------------------+-------------------------------+-------------------------------+------------+----------------
 conditions |   1011 | drop_chunks | t                | 2020-07-26 13:52:02.552562+08 | 2020-07-26 13:52:02.552562+08 | 2020-07-26 13:52:02.050851+08 | 2020-07-27 13:52:02.552562+08 |          3 |              0

查詢hypertable表信息

參數

字段名

描述

table_schema

hypertable的架構名稱。

table_name

hypertable的表名。

table_owner

hypertable的所有者。

num_dimensions

尺寸數。

num_chunks

塊數。

table_size

hypertable使用的磁盤空間

index_size

索引使用的磁盤空間

toast_size

大字段的磁盤空間

total_size

指定表使用的總磁盤空間,包括所有索引和TOAST數據

查詢hypertable的信息
SELECT * FROM timescaledb_information.hypertable;
 
#結果
 table_schema | table_name | table_owner | num_dimensions | num_chunks | table_size | index_size | toast_size | total_size
--------------+------------+-------------+----------------+------------+------------+------------+------------+------------
 public       | metrics    | postgres    |              1 |          5 | 99 MB      | 96 MB      |            | 195 MB
 public       | devices    | postgres    |              1 |          1 | 8192 bytes | 16 kB      |            | 24 kB


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM