timescaledb 提供了內置的api 操作,方便我們進行操作控制
hypertable 控制api
- add_dimension
向hypertable添加一個額外的分片方式,可以做為分片列有時間間隔的以及hash分片
必須參數
名稱 | 說明 |
---|---|
main_table |
hypertable 名稱. |
column_name |
使用的分片列 |
可選參數
名稱 | 說明 |
---|---|
number_partitions |
hash 分片個數 column_name . 必須 > 0. |
chunk_time_interval |
每個chunk 的間隔 必須 > 0. |
partitioning_func |
分片函數 |
if_not_exists |
避免對於已經存在而進行創建是報錯 |
參考:
SELECT create_hypertable('conditions', 'time');
SELECT add_dimension('conditions', 'location', number_partitions => 4);
- attach_tablespace
給hypertable 附加tablespace 信息,數據chunk 會按照此進行存儲
必須參數
名稱 | 描述 |
---|---|
tablespace |
tablespace |
hypertable |
hypertable 名稱 |
附加tablespace 之前必須創建好,tablespace 可以附加給多個hypertable 可選參數
名稱 | 描述 |
---|---|
if_not_attached |
避免對於已經存在而進行創建是報錯 |
參考:
SELECT attach_tablespace('disk1', 'conditions');
SELECT attach_tablespace('disk2', 'conditions', if_not_attached => true);
- create_hypertable
創建hypertable
必須參數
名稱 | 描述 |
---|---|
main_table |
將要轉換為hypertable的表 |
time_column_name |
做為時間指的分片列 |
可選參數
名稱 | 描述 |
---|---|
partitioning_column |
分片列 |
number_partitions |
分片個數 |
chunk_time_interval |
每個chunk的間隔 |
create_default_indexes |
分片列索引創建默認是true |
if_not_exists |
避免對於已經存在而進行創建是報錯 |
partitioning_func |
分片函數 |
associated_schema_name |
內部hypertable 關聯的schema默認為_timescaledb_internal |
associated_table_prefix |
hypertable chunk 數據表的后綴 |
migrate_data |
是否進行數據遷移,會話時間,具體的可以參考官方文檔 |
參考
SELECT create_hypertable('conditions', 'time', chunk_time_interval => 86400000000);
SELECT create_hypertable('conditions', 'time', chunk_time_interval => interval '1 day');
最佳實踐: 具體的可以參考官方文檔
- drop_chunks
刪除chunk 的數據
必須參數
名稱 | 描述 |
---|---|
older_than |
Timestamp of cut-off point for data to be dropped, i.e., anything older than this should be removed. |
可選參數
名稱 | 描述 |
---|---|
table_name |
hypertable 名稱 |
schema_name |
schema 默認是public |
cascade |
是否進行及聯數據刪除 |
參考
SELECT drop_chunks(interval '3 months', 'conditions');
分析類函數Analytics
方便進行時序分析的一些函數,比如first 、last、time_bucket
- first
必須參數
名稱 | 描述 |
---|---|
value |
The value to return (anyelement) |
time |
The timestamp to use for comparison (TIMESTAMP/TIMESTAMPTZ or integer type) |
參考
SELECT device_id, first(temp, time)
FROM metrics
GROUP BY device_id;
- last
必須參數
名稱 | 參數 |
---|---|
value |
The value to return (anyelement) |
time |
The timestamp to use for comparison (TIMESTAMP/TIMESTAMPTZ or integer type) |
參考
SELECT device_id, time_bucket('5 minutes', time) as interval, last(temp, time)
FROM metrics WHERE time > now () - interval '1 day'
GROUP BY device_id, interval
ORDER BY interval DESC;
工具類
比較多,主要有以下幾個
- chunk_relation_size
- chunk_relation_size_pretty
- hypertable_relation_size
- hypertable_relation_size_pretty
- show_tablespaces