Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
tree: 2a36fb7c73
Fetching contributors…

Cannot retrieve contributors at this time

123 lines (99 sloc) 4.466 kb
-- ADAPTIVE SAMPLING ESTIMATOR
-- adaptive_estimator data type (shell type)
CREATE TYPE adaptive_estimator;
-- get estimator size for the requested error rate / number of distinct items
CREATE FUNCTION adaptive_size(errorRate real, ndistinct int) RETURNS int
AS 'MODULE_PATHNAME', 'adaptive_size'
LANGUAGE C;
-- creates a new adaptive estimator with a given error / number of distinct items
CREATE FUNCTION adaptive_init(errorRate real, ndistinct int) RETURNS adaptive_estimator
AS 'MODULE_PATHNAME', 'adaptive_init'
LANGUAGE C;
-- add an item to the estimator
CREATE FUNCTION adaptive_add_item(counter adaptive_estimator, item text) RETURNS void
AS 'MODULE_PATHNAME', 'adaptive_add_item_text'
LANGUAGE C;
-- add an item to the estimator
CREATE FUNCTION adaptive_add_item(counter adaptive_estimator, item int) RETURNS void
AS 'MODULE_PATHNAME', 'adaptive_add_item_int'
LANGUAGE C;
-- get error rate used when creating the estimator (as a real number)
CREATE FUNCTION adaptive_get_error(counter adaptive_estimator) RETURNS real
AS 'MODULE_PATHNAME', 'adaptive_get_error'
LANGUAGE C STRICT;
-- get expected number of distinct values used when creating the estimator (as integer)
CREATE FUNCTION adaptive_get_ndistinct(counter adaptive_estimator) RETURNS int
AS 'MODULE_PATHNAME', 'adaptive_get_ndistinct'
LANGUAGE C STRICT;
-- get number of distinct values used when creating the estimator (int)
CREATE FUNCTION adaptive_get_item_size(counter adaptive_estimator) RETURNS int
AS 'MODULE_PATHNAME', 'adaptive_get_item_size'
LANGUAGE C STRICT;
-- reset the estimator (start counting from the beginning)
CREATE FUNCTION adaptive_reset(counter adaptive_estimator) RETURNS void
AS 'MODULE_PATHNAME', 'adaptive_reset'
LANGUAGE C STRICT;
-- length of the estimator (about the same as adaptive_size with existing estimator)
CREATE FUNCTION length(counter adaptive_estimator) RETURNS int
AS 'MODULE_PATHNAME', 'adaptive_length'
LANGUAGE C STRICT;
-- get current estimate of the distinct values (as a real number)
CREATE FUNCTION adaptive_get_estimate(counter adaptive_estimator) RETURNS real
AS 'MODULE_PATHNAME', 'adaptive_get_estimate'
LANGUAGE C STRICT;
-- get current estimate of the distinct values (as a real number)
CREATE FUNCTION adaptive_merge(adaptive_estimator, adaptive_estimator) RETURNS adaptive_estimator
AS 'MODULE_PATHNAME', 'adaptive_merge'
LANGUAGE C;
/* functions for the aggregates */
CREATE FUNCTION adaptive_add_item_agg(counter adaptive_estimator, item text, errorRate real, ndistinct int) RETURNS adaptive_estimator
AS 'MODULE_PATHNAME', 'adaptive_add_item_agg_text'
LANGUAGE C;
CREATE FUNCTION adaptive_add_item_agg(counter adaptive_estimator, item int, errorRate real, ndistinct int) RETURNS adaptive_estimator
AS 'MODULE_PATHNAME', 'adaptive_add_item_agg_int'
LANGUAGE C;
CREATE FUNCTION adaptive_add_item_agg2(counter adaptive_estimator, item text) RETURNS adaptive_estimator
AS 'MODULE_PATHNAME', 'adaptive_add_item_agg2_text'
LANGUAGE C;
CREATE FUNCTION adaptive_add_item_agg2(counter adaptive_estimator, item int) RETURNS adaptive_estimator
AS 'MODULE_PATHNAME', 'adaptive_add_item_agg2_int'
LANGUAGE C;
/* input / output functions */
CREATE FUNCTION adaptive_in(value cstring) RETURNS adaptive_estimator
AS 'MODULE_PATHNAME', 'adaptive_in'
LANGUAGE C STRICT;
CREATE FUNCTION adaptive_out(counter adaptive_estimator) RETURNS cstring
AS 'MODULE_PATHNAME', 'adaptive_out'
LANGUAGE C STRICT;
-- data type for the adaptive-sampling based distinct estimator
CREATE TYPE adaptive_estimator (
INPUT = adaptive_in,
OUTPUT = adaptive_out,
LIKE = bytea
);
-- adaptive based aggregate
-- item / error rate / number of items
CREATE AGGREGATE adaptive_distinct(text, real, int)
(
sfunc = adaptive_add_item_agg,
stype = adaptive_estimator,
finalfunc = adaptive_get_estimate
);
CREATE AGGREGATE adaptive_distinct(int, real, int)
(
sfunc = adaptive_add_item_agg,
stype = adaptive_estimator,
finalfunc = adaptive_get_estimate
);
CREATE AGGREGATE adaptive_distinct(text)
(
sfunc = adaptive_add_item_agg2,
stype = adaptive_estimator,
finalfunc = adaptive_get_estimate
);
CREATE AGGREGATE adaptive_distinct(int)
(
sfunc = adaptive_add_item_agg2,
stype = adaptive_estimator,
finalfunc = adaptive_get_estimate
);
Jump to Line
Something went wrong with that request. Please try again.