MasterSnapshot Export & Snapshot Transform – Klarer Datentransfer aus Pimcore

MasterSnapshot Export & Snapshot Transform – Clean data pipelines from Pimcore

Der MasterSnapshot erfasst veröffentlichte Objekte vollständig als JSON. Snapshot Transform wandelt sie regelbasiert in CSV – perfekt für Shop, ERP und Marktplätze.

Warum Snapshots?

Reproduzierbar

Ein eingefrorener Datenstand pro Lauf – ideal für Tests, Audits und inkrementelle Vergleiche.

Trennung von Extraktion & Mapping

Zuerst vollständige JSONs, danach Transformationen je Kanal. Saubere, flexible ETL-Kette.

Schnell & sicher

Nur published Objekte. Kein Risiko, Drafts zu exportieren. Performance-optimiert pro Klasse.

Why snapshots?

Reproducible

A frozen dataset per run – perfect for tests, audits, and incremental diffs.

Separate extract & mapping

First full JSON, then per-channel transforms. Clean, flexible ETL chain.

Fast & safe

Only published objects. No risk of exporting drafts. Class-wise performance.

1) MasterSnapshot Export (CLI)

Der Befehl erzeugt pro Klasse eine vollständige JSON-Datei (nur published) plus Manifest. Ziel: var/export/snapshot/<timestamp>/.

# Beispiel (Windows)
php bin/console snapshot:master-export Produkt,Kategorie,Anwendung ^
  --out-dir var/export/snapshot --lang de

# Example (Linux/Mac)
php bin/console snapshot:master-export Produkt,Kategorie,Anwendung \
  --out-dir var/export/snapshot --lang de

Ausgabe je Klasse: Produkt.json, Kategorie.json, … sowie manifest.json (Meta, Zähler, Dauer).

  • Unterstützt: Assets (ID/Pfad/Filename), Feld- & Klassifizierungs-Strukturen, M2M/AM2M inkl. Metadaten, Blöcke, Fieldcollections (lokalisiert).
  • Supports: assets (id/path/filename), field & classification structures, M2M/AM2M incl. metadata, blocks, fieldcollections (localized).

2) Snapshot Transform → CSV

Das Transform-Command liest den Snapshot-Ordner und wendet ein Profil mit Regeln an (Felder, Pfade, Lookups, Join, Lokalisierung).

# Windows
php bin/console transformer:run produkt.csv.profile ^
  var/export/snapshot/2025-08-12_1100 ^
  C:\temp\produkt.csv ^
  --delimiter=tab --list-sep="|" --encoding="utf8-bom" --quote=none

# Linux/Mac
php bin/console transformer:run produkt.csv.profile \
  var/export/snapshot/2025-08-12_1100 \
  /tmp/produkt.csv \
  --delimiter=tab --list-sep="|" --encoding="utf8-bom" --quote=none

--delimiter=tab setzt Tab als Trenner, --quote=none schaltet doppelte Anführungszeichen ab (praktisch bei TSV).

Regelprofil – Felder & Pfade

Ein Profil definiert Spalten. Jede Spalte hat eine path (JSON-Pfad im Snapshot), optional join für Listen und unique.

{
  "class": "Produkt",
  "lang": "de",
  "columns": {
    "ID":             { "path": "id" },
    "Key":            { "path": "key" },
    "Bezeichnung":    { "path": "loc:Bezeichnung" },
    "Anwendungen":    { "path": "Anwendungen[].key", "join": "|", "unique": true },
    "Kategorien":     { "path": "Kategorien[].key",  "join": "|", "unique": true },
    "Bilder":         { "path": "Bilder[].Bild[].path", "join": "|" }
  },
  "lookups": {
    "Anwendungen": { "file": "anwendung.json" },
    "Kategorien":  { "file": "kategorie.json" }
  }
}
  • loc:… holt lokalisierte Werte.
  • [].key extrahiert aus Relationen die Keys (Liste).
  • Lookups schlagen IDs gegen separate Klassen-JSONs nach.
  • loc:… fetches localized values.
  • [].key extracts relation keys (list).
  • Lookups resolve IDs via separate class JSONs.

CSV-Optionen

  • --delimiter: comma, semicolon, tab, oder ein Zeichen (z. B. ;).
  • --list-sep: Trenner für Mehrfachwerte (Default |).
  • --encoding: utf8, utf8-bom, iso-8859-1.
  • --quote: auto, double, none (für TSV oft none).
  • --enclosure/--escape: Feintuning für Spezialfälle.

Tipp: Unter Windows Pfade in Anführungszeichen setzen. Für Tab als Trenner --delimiter=tab verwenden.

Was steckt im Snapshot?

  • Alle Felder inkl. Localizedfields (sprachenbewusst über loc: abrufbar).
  • Relationen (M2M/AM2M) – IDs, Keys, Pfade, optional Metadaten.
  • Fieldcollections & Blöcke – als Arrays, sauber serialisiert.
  • Assets – ID, Pfad, Dateiname.
  • All fields including localizedfields (language-aware via loc:).
  • Relations (M2M/AM2M) – ids, keys, paths, optional metadata.
  • Fieldcollections & blocks – arrays, neatly serialized.
  • Assets – id, path, filename.

Best Practices

  • Nur benötigte Klassen exportieren – schneller & schlanker.
  • Lookups nutzen, statt harte Mappings im Code.
  • Einheitliche list-sep (z. B. |) pro Kanal.
  • Für Excel-Importe oft utf8-bom wählen.
  • Export only required classes – faster & smaller.
  • Prefer lookups over hard-coded maps.
  • Keep a consistent list-sep (e.g., |) per channel.
  • For Excel consumers, consider utf8-bom.

Wie filtere ich nur veröffentlichte Objekte?

Ist fest im Snapshot-Export verankert (o_published = 1). Drafts werden nie exportiert.

It’s built into the snapshot export (o_published = 1). Drafts are never exported.

Wie referenziere ich lokalisierte Felder?

Mit Präfix loc:, z. B. loc:Bezeichnung. Sprache per --lang (Export) bzw. im Profil definieren.

Use loc:, e.g., loc:Bezeichnung. Language via --lang (export) or in the profile.

TSV ohne Quotes?

--delimiter=tab und --quote=none verwenden.

Use --delimiter=tab and --quote=none.

Windows-Pfade

Backslashes escapen oder Pfade in Anführungszeichen setzen: "C:\temp\out.csv".

Escape backslashes or wrap in quotes: "C:\temp\out.csv".