ClickHouse Analytics — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited ClickHouse Analytics (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Get fast analytical queries from ClickHouse by modeling for its columnar, sorted storage.
ClickHouse has no traditional secondary index by default; the sorting key defines the primary index and physical order.
CREATE TABLE events (
event_date Date,
user_id UInt64,
event_type LowCardinality(String),
value Float64
)
ENGINE = MergeTree
PARTITION BY toYYYYMM(event_date)
ORDER BY (event_type, event_date, user_id);Put the columns you filter and group by most, in order of selectivity, into ORDER BY. Queries that filter on a prefix of the sorting key skip irreplevant granules.
Partition by a coarse column like month. Partitions enable fast DROP PARTITION for retention and let queries prune whole partitions. Do not over-partition; too many partitions hurt merges.
LowCardinality(String) for columns with few distinct values; it dictionary-encodes them.DateTime over strings for timestamps.A materialized view is an insert trigger that writes transformed rows into a target table as data arrives:
CREATE MATERIALIZED VIEW daily_mv
TO daily_agg AS
SELECT event_date, event_type, count() AS cnt, sum(value) AS total
FROM events GROUP BY event_date, event_type;Combine with an AggregatingMergeTree target and -State/-Merge combinators to maintain rollups incrementally.
Projections store an alternative sort order or pre-aggregation inside the same table; ClickHouse picks the best one per query automatically:
ALTER TABLE events ADD PROJECTION by_user
( SELECT user_id, count() GROUP BY user_id );SELECT *; read only needed columns since storage is columnar.PREWHERE for highly selective filters to read fewer columns.EXPLAIN and check parts read in the query log.uniqHLL12 when exactness is not required.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.