Multi-metric tables
A tag + field model for multi-metric time-series data. A multi-metric ChronoTable indexes its tag columns automatically and exposes cardinality controls so you can catch label explosion early.
create_metric_table(p_table_name, p_tag_columns, p_field_columns, p_chunk_interval, p_schema_name)
Creates a ChronoTable optimized for multi-metric data with automatic indexing on tag columns.
| Parameter | Type | Default | Description |
|---|---|---|---|
p_table_name | TEXT | — | Table name |
p_tag_columns | TEXT[] | — | Tag columns (indexed TEXT, low cardinality) |
p_field_columns | TEXT[] | — | Field columns (DOUBLE PRECISION, high cardinality) |
p_chunk_interval | INTERVAL | '1 day' | Partition interval |
p_schema_name | TEXT | 'public' | Schema |
Returns: INT — chronotable_id
SELECT lakets.create_metric_table(
'system_metrics',
ARRAY['host', 'datacenter', 'service'], -- tags
ARRAY['cpu_pct', 'mem_pct', 'disk_io'], -- fields
'1 day'
);
cardinality_stats(p_table_name, p_schema_name)
Distinct value counts per tag column — essential for catching series explosion.
Returns: TABLE — column_name, distinct_values, total_rows, pct_of_rows
cardinality_check(p_table_name, p_max_series, p_schema_name)
Warns if combined cardinality across all tag columns exceeds a threshold.
| Parameter | Type | Default | Description |
|---|---|---|---|
p_table_name | TEXT | — | Metric table name |
p_max_series | BIGINT | 100000 | Maximum allowed series count |
p_schema_name | TEXT | 'public' | Schema |
Returns: TABLE — status ('OK', 'WARNING' above 80% of the limit, or 'CRITICAL' above the limit), combined_cardinality, max_allowed, tag_columns
SELECT * FROM lakets.cardinality_check('system_metrics');
-- OK | 2500 | 100000 | host,datacenter,service