mirror of
https://github.com/timescale/timescaledb.git
synced 2025-05-17 02:53:51 +08:00
This commit introduces 4 compression algorithms as well as 3 ADTs to support them. The compression algorithms are time-series optimized. The following algorithms are implemented: - DeltaDelta compresses integer and timestamp values - Gorilla compresses floats - Dictionary compression handles any data type and is optimized for low-cardinality datasets. - Array stores any data type in an array-like structure and does not actually compress it (though TOAST-based compression can be applied on top). These compression algorithms are are fully described in tsl/src/compression/README.md. The Abstract Data Types that are implemented are - Vector - A dynamic vector that can store any type. - BitArray - A dynamic vector to store bits. - SimpleHash - A hash table implementation from PG12. More information can be found in src/adts/README.md
60 lines
2.8 KiB
SQL
60 lines
2.8 KiB
SQL
-- This file and its contents are licensed under the Apache License 2.0.
|
|
-- Please see the included NOTICE for copyright information and
|
|
-- LICENSE-APACHE for a copy of the license.
|
|
|
|
-- This file is meant to contain aggregate functions that need to be created only
|
|
-- once and not recreated during updates.
|
|
-- There is no CREATE OR REPLACE AGGREGATE which means that the only way to replace
|
|
-- an aggregate is to DROP then CREATE which is problematic as it will fail
|
|
-- if the previous version of the aggregate has dependencies.
|
|
-- NOTE that WHEN CREATING NEW FUNCTIONS HERE you should also make sure they are
|
|
-- created in an update script so that both new users and people updating from a
|
|
-- previous version get the new function
|
|
|
|
|
|
--This aggregate returns the "first" element of the first argument when ordered by the second argument.
|
|
--Ex. first(temp, time) returns the temp value for the row with the lowest time
|
|
CREATE AGGREGATE first(anyelement, "any") (
|
|
SFUNC = _timescaledb_internal.first_sfunc,
|
|
STYPE = internal,
|
|
COMBINEFUNC = _timescaledb_internal.first_combinefunc,
|
|
SERIALFUNC = _timescaledb_internal.bookend_serializefunc,
|
|
DESERIALFUNC = _timescaledb_internal.bookend_deserializefunc,
|
|
PARALLEL = SAFE,
|
|
FINALFUNC = _timescaledb_internal.bookend_finalfunc,
|
|
FINALFUNC_EXTRA
|
|
);
|
|
|
|
--This aggregate returns the "last" element of the first argument when ordered by the second argument.
|
|
--Ex. last(temp, time) returns the temp value for the row with highest time
|
|
CREATE AGGREGATE last(anyelement, "any") (
|
|
SFUNC = _timescaledb_internal.last_sfunc,
|
|
STYPE = internal,
|
|
COMBINEFUNC = _timescaledb_internal.last_combinefunc,
|
|
SERIALFUNC = _timescaledb_internal.bookend_serializefunc,
|
|
DESERIALFUNC = _timescaledb_internal.bookend_deserializefunc,
|
|
PARALLEL = SAFE,
|
|
FINALFUNC = _timescaledb_internal.bookend_finalfunc,
|
|
FINALFUNC_EXTRA
|
|
);
|
|
|
|
-- This aggregate partitions the dataset into a specified number of buckets (nbuckets) ranging
|
|
-- from the inputted min to max values.
|
|
CREATE AGGREGATE histogram (DOUBLE PRECISION, DOUBLE PRECISION, DOUBLE PRECISION, INTEGER) (
|
|
SFUNC = _timescaledb_internal.hist_sfunc,
|
|
STYPE = INTERNAL,
|
|
COMBINEFUNC = _timescaledb_internal.hist_combinefunc,
|
|
SERIALFUNC = _timescaledb_internal.hist_serializefunc,
|
|
DESERIALFUNC = _timescaledb_internal.hist_deserializefunc,
|
|
PARALLEL = SAFE,
|
|
FINALFUNC = _timescaledb_internal.hist_finalfunc,
|
|
FINALFUNC_EXTRA
|
|
);
|
|
|
|
CREATE AGGREGATE _timescaledb_internal.finalize_agg(agg_name TEXT, inner_agg_collation_schema NAME, inner_agg_collation_name NAME, inner_agg_input_types NAME[][], inner_agg_serialized_state BYTEA, return_type_dummy_val anyelement) (
|
|
SFUNC = _timescaledb_internal.finalize_agg_sfunc,
|
|
STYPE = internal,
|
|
FINALFUNC = _timescaledb_internal.finalize_agg_ffunc,
|
|
FINALFUNC_EXTRA
|
|
);
|