pfc
PFC-JSONL-komprimierte Logdateien direkt in DuckDB mit blockweiser Zeitstempel-Filterung lesen
Maintainer: ImpossibleForge
Installation und Laden
INSTALL pfc FROM community;LOAD pfc;Beispiel
INSTALL pfc FROM community;LOAD pfc;LOAD json;
-- Read a compressed PFC-JSONL log fileSELECT line->>'$.level' AS level, line->>'$.message' AS messageFROM read_pfc_jsonl('/path/to/events.pfc')LIMIT 10;
-- Block-level timestamp filter: only decompress relevant blocksSELECT count(*) FROM read_pfc_jsonl( '/path/to/events.pfc', ts_from = epoch(TIMESTAMPTZ '2026-01-01 00:00:00+00'), ts_to = epoch(TIMESTAMPTZ '2026-01-02 00:00:00+00'));Über pfc
Die Erweiterung pfc ermöglicht das direkte Abfragen von PFC-JSONL- komprimierten Logdateien in DuckDB — kein Dekompressionsschritt, keine Zwischendateien.
Warum PFC-JSONL?
PFC-JSONL erreicht auf realen strukturierten Logdaten eine bessere Kompression als gzip und zstd,
indem BWT + rANS-Entropiekodierung auf sich wiederholende JSONL-Muster abgestimmt wird.
Zusätzlich zur überlegenen Kompression unterstützt jede .pfc-Datei wahlfreien Blockzugriff —
nur die benötigten Blöcke werden jemals dekomprimiert.
Verhältnisse gemessen an realistischen JSONL-Logdaten (8 Dienste, gemischte Log-Level):
| Compressor | Compression ratio | vs PFC-JSONL |
|---|---|---|
| gzip | ~12 % | 25 % larger |
| zstd | ~14 % | 37 % larger |
| PFC-JSONL | ~9 % | — |
Wichtige Funktionen
-
Blockweise Zeitstempel-Filterung über die Parameter
ts_from/ts_to. Ganze Blöcke außerhalb des angeforderten Zeitfensters werden vor der Dekompression übersprungen. Eine 1-Stunden-Abfrage auf einer 30-Tage-Datei mit stündlichen Blöcken liest ~1/720 der Daten (~720× Beschleunigung). -
Kein Konto, keine Anmeldung, keine Limits. Kostenlos für persönliche und Open-Source-Nutzung. Kommerzielle Nutzung erfordert eine Lizenz — siehe ImpossibleForge/pfc-jsonl.
-
Einfache API: eine Spalte
line VARCHARpro Zeile (roher JSON-String). Kombinieren Sie dies mit DuckDBs eingebauterjson-Erweiterung für Feldextraktion und Analytik. -
Nur Linux und macOS. Windows-Nutzer: WSL2 verwenden.
Anforderungen
Die Erweiterung ruft die PFC-JSONL-Binary (v3.4+) für die Blockdekompression auf. Einmalig installieren:
curl -L https://github.com/ImpossibleForge/pfc-jsonl/releases/latest/download/pfc_jsonl-linux-x64 -o /usr/local/bin/pfc_jsonl && chmod +x /usr/local/bin/pfc_jsonlDie Binary wird unter /usr/local/bin/pfc_jsonl erwartet.
Überschreiben Sie dies mit der Umgebungsvariable PFC_JSONL_BINARY.
Dateiformat
Jede .pfc-Datei muss einen begleitenden binären Blockindex .pfc.bidx haben,
der automatisch von PFC-JSONL v3.4+ geschrieben wird:
pfc_jsonl compress input.jsonl output.pfc# Produces: output.pfc + output.pfc.bidxAnalysebeispiel
LOAD pfc;LOAD json;
-- Error rate per hour for a specific daySELECT strftime(to_timestamp((line->>'$.ts')::BIGINT), '%H:00') AS hour, count(*) FILTER (WHERE line->>'$.level' = 'ERROR') AS errors, count(*) AS totalFROM read_pfc_jsonl( '/var/log/api.pfc', ts_from = epoch(TIMESTAMPTZ '2026-03-15 00:00:00+00'), ts_to = epoch(TIMESTAMPTZ '2026-03-16 00:00:00+00'))GROUP BY hourORDER BY hour;Hinzugefügte Funktionen
| function_name | function_type | description | comment | examples |
|---|---|---|---|---|
| read_pfc_jsonl | table | NULL | NULL |
Überladene Funktionen
Diese Erweiterung fügt keine Funktionsüberladungen hinzu.
Hinzugefügte Typen
Diese Erweiterung fügt keine Typen hinzu.
Hinzugefügte Einstellungen
Diese Erweiterung fügt keine Einstellungen hinzu.