轉載
創建時序數據庫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