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 file
SELECT
line->>'$.level' AS level,
line->>'$.message' AS message
FROM read_pfc_jsonl('/path/to/events.pfc')
LIMIT 10;
-- Block-level timestamp filter: only decompress relevant blocks
SELECT 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 VARCHAR pro Zeile (roher JSON-String). Kombinieren Sie dies mit DuckDBs eingebauter json-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:

Terminal window
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_jsonl

Die 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:

Terminal window
pfc_jsonl compress input.jsonl output.pfc
# Produces: output.pfc + output.pfc.bidx

Analysebeispiel

LOAD pfc;
LOAD json;
-- Error rate per hour for a specific day
SELECT
strftime(to_timestamp((line->>'$.ts')::BIGINT), '%H:00') AS hour,
count(*) FILTER (WHERE line->>'$.level' = 'ERROR') AS errors,
count(*) AS total
FROM 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 hour
ORDER 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.