Releases: Angelerator/nilalytics
Releases · Angelerator/nilalytics
Release list
nilalytics v0.3.0
Highlights
- Subject partition + person bucketing for
user_events. The curated table is now laid outsubject › date › bucket(person_id)and sorted byperson_id, so category, time-window, and single-person reads all prune well.person_idis hashed intoNbuckets (bucket(N, person_id)) — DuckLake's recommended way to partition a high-cardinality key without the small-files problem. Tune withNILA_USER_EVENTS_BUCKETS(default 16). - Subjects. Every event is classified into a low-cardinality subject —
errors/activities/ai_usage/traceability/other. An explicitnila.subjectattribute wins; otherwise it's derived (severity/exception → errors,gen_ai/llm→ ai_usage, identify/audit → traceability). Unknown values clamp toother. - Identity lookup by any key. Users are defined by any stable, unique key (email / account id / phone), hashed into a
person_id. Newnilalytics identify <key>prints that id, andnilalytics query user --key <value> [days]hashes it for you. - New reads.
query subject <name> [days], a subject breakdown inquery user_events, and the emitter now sends sampleai_usageevents.
Upgrade note
The user_events table gains a subject column and a new partition layout. On first start after upgrade, the server rebuilds it from otlp_logs (the source of truth) automatically.
Full changelog: v0.2.0...v0.3.0
nilalytics v0.2.0
Highlights
- Curated
user_eventstable (recommendations / ML). Identity and the common event fields are lifted out of JSON into typed columns, partitioned by day and sorted byperson_id, so "one user's history" is a fast, file-pruned read. Refreshed incrementally via the DuckLake change feed (snapshot-id watermark → exactly-once, order-safe). - Per-user activity view.
nilalytics query user <id> [days]returns one person's full activity and logs, optionally windowed (e.g. last 16 days), with a per-event-type breakdown. - Opt-in data retention.
NILA_RETENTION_DAYSdrops event rows older than the cutoff (acrossotlp_logs,otlp_traces,otlp_metrics_*,user_events) so storage stays bounded. Runs inside the single-writer server. Distinct fromNILA_RETENTION_MS(snapshot/time-travel retention). - Retention dry-run.
nilalytics maintenance --retention-dry-run [--days N]previews exactly what retention would delete, per table — read-only, deletes nothing. - Backend (server-side) activity guide. Documents backends as a first-class OTLP source and how to tie backend spans to the same user/action.
Docs
New User events and Backend activity guides; expanded configuration, querying, maintenance, and architecture pages.
Full changelog: v0.1.0...v0.2.0
nilalytics v0.1.0
First release of nilalytics — serverless realtime web & mobile analytics on
DuckLake + object storage (S3/GCS/R2/Azure), served over DuckDB's Quack protocol.
Highlights:
- OTLP ingest (duckdb-otlp) into DuckLake with data inlining
- Public ingest gateway: CORS, short-lived tokens, optional TLS
- Multi-cloud object storage, read-only Quack query authz
- Cross-device pseudonymous identity, funnels/retention/traces/metrics
nilalyticsCLI + full docs at https://angelerator.github.io/nilalytics/
Install: pip install nilalytics