Der folgende Abschnitt behandelt das Laden der SAP-Extraktionsdaten in eine Snowflake-Umgebung.

Voraussetzungen #

Die Anbindung an die Snowflake Zielumgebung erfolgt über den ODBC-Treiber für Windows 64-Bit Architekturen.
Es sind keine zusätzlichen Installationen für die Nutzung der Snowflake Destination erforderlich.

Verbindung #

Eine Destination hinzufügen #

  1. Navigieren Sie im Hauptfenster des Designers zu Server > Manage Destinations. Das Fenster “Manage Destination” wird geöffnet.
  2. Klicken Sie auf [Add], um eine neue Destination hinzufügen. Das Fenster “Destination Details” wird geöffnet.
  3. Geben Sie einen Namen für die Destination ein.
  4. Wählen Sie den Destinationstyp aus dem Dropdown-Menü aus.

Destination Details #

Snowflake-Destination

Connection

Output directory
Angabe eines vorhandenen Verzeichnisses, in das die Zieldateien abgelegt werden.

Region
Angabe der Region der Snowflake-Umgebung.
In unserem Beispiel haben wir die Region AWS - EU (Frankfurt) gewählt. Die gewählte Region muss den Angaben im zugewiesen Account entsprechen.

Account
Name des vom Snowflake zugewiesenen Kontos. In unserem Beispiel ist es “dummy_account”, wie es in der folgenden URL steht:
https://dummy_account.eu-central-1.snowflakecomputing.com/console#/

User Name
Name des Benutzers eingeben.

Password
Passwort des Benutzers eingeben.

Database
Name der Datenbank eingeben.

Schema
Name des Schema eingeben.

Connect
Klicken Sie auf Connect, um Ihre Verbindung zu prüfen. Ist die Verbindung erfolgreich, dann können Sie weitere Einstellungen definieren.

Stage

Stage name
Name der Snowflake Stage eingeben. Beachten Sie, dass nur “Internal” Stages unterstützt werden.

Warehouse
Name der Snowflake Data Warehouse eingeben.

Einstellungen #

Destination Settings öffnen #

  1. Eine bestehende Extraktion anlegen oder auswählen (siehe auch Erste Schritte mit Xtract Universal).
  2. Klicken Sie auf [Destinations]. Das Fenster “Destination Settings” wird geöffnet. Destination-settings

Die folgenden Einstellungen können für die Destination definiert werden.

Destination Settings - Destinationseinstellungen #

Snowflake-Destination-Einstellungen

File Name #

bestimmt den Namen der Zieltabelle. Sie haben die folgenden Optionen:

  • Same as name of SAP object: Name des SAP-Objekts übernehmen
  • Same as name of extraction: Name der Extraktion übernehmen
  • Custom: Hier können Sie einen eigenen Namen definieren

  • Append timestamp: fügt den aktuellen Zeitstempel im Format [_YYYY_MM_DD_hh_mm_ss_fff] dem Dateinamen der Extraktion hinzu.

Column Name Style #

Definiert den Spaltennamen. Folgende Optionen sind verfügbar:

column_name_style_options

  • Code: Der technische Spaltenname aus SAP wird als Spaltenname verwendet, z.B. MAKTX
  • PrefixedCode: Der technische Name der Tabelle wird mit dem Tilde-Zeichen und dem entsprechenden Spaltennamen verbunden, z. B. MAKT~MAKTX
  • CodeAndText: Der technische Name und die Beschreibung der Spalte aus SAP mit einem Unterstrich verbunden werden als Spaltennamen verwendet, z.B. MAKTX_Material Description (Short Text)
  • TextAndCode: Die Beschreibung und der technische Name der Spalte SAP mit einem Unterstrich verbunden werden als Spaltennamen verwendet, z.B. Material Description (Short Text)_MAKTX

Date conversion #

Convert date strings
Konvertiert die Zeichenabfolge des SAP-Datums (YYYYMMDD, z.B. 19900101) zu einem formatierten Datum (YYYY-MM-DD, z.B. 1990-01-01). Im Datenziel hat das SAP-Datum keinen String-Datentyp sondern einen echten Datumstyp.

Convert invalid dates to
Falls ein SAP-Datum nicht in ein gültiges Datumsformat konvertiert werden kann, wird das ungültige Datum zu dem eingegebenen Wert konvertiert. NULL wird als Wert unterstützt.

Bei der Konvertierung eines ungültigen SAP-Datums werden zuerst die beiden Sonderfälle 00000000 und 9999XXXX überprüft.

Convert 00000000 to
Konvertiert das SAP-Datum 00000000 zu dem eingegebenen Wert.

Convert 9999XXXX to
Konvertiert das SAP-Datum 9999XXXX zu dem eingegebenen Wert.

Preparation - SQL Anweisungen #

Aktion auf der Zieldatenbank, bevor die Daten in die Zieltabelle eingefügt werden.

  • Drop & Create: Tabelle entfernen falls vorhanden und neu anlegen (Default).
  • Truncate Or Create: Tabelle entleeren falls vorhanden, sonst anlegen.
  • Create If Not Exists: Tabelle anlegen falls nicht vorhanden.
  • Prepare Merge: bereitet den Merge-Prozess vor und erstellt z.B. eine temporäre Staging-Tabelle. Für weitere Infos siehe Abschnitt Über Merging.
  • None: keine Aktion
  • Custom SQL: Hier können Sie eigenes Skript definieren. Siehe den unteren Abschnitt Custom SQL.

Wollen Sie im ersten Schritt nur die Tabelle anlegen und keine Daten einfügen, dann haben Sie zwei Möglichkeiten:

  1. Sie kopieren das SQL-Statement und führen es direkt auf der Zieldaten-Datenbank aus.
  2. Sie wählen die Option None für Row Processing und führen die Extraktion aus.

Nachdem die Tabelle angelegt ist, bleibt es Ihnen überlassen, die Tabellendefinition zu ändern, indem Sie bspw. entsprechende Schlüsselfelder und Indizes bzw. zusätzliche Felder anlegen.

Row Processing - SQL Anweisungen #

Definiert, wie die Daten in die Zieltabelle eingefügt werden.

  • None: keine Aktion.
  • Copy file to table: Datensätze einfügen (Default).
  • Merge File to table: Datensätze in die Staging-Tabelle einfügen.
  • Custom SQL: Hier können Sie eigenes Skript definieren. Siehe den unteren Abschnitt Custom SQL.

Finalization - SQL Anweisungen #

Aktion auf der Zieldatenbank, nachdem die Daten in die Zieltabelle erfolgreich eingefügt werden.

  • Finalize Merge: schließt den Merge-Prozess ab und löscht z.B. die temporäre Staging-Tabelle. Für weitere Infos siehe Daten Mergen.
  • None: keine Aktion (Default).
  • Custom SQL: Hier können Sie eigenes Skript definieren. Siehe den unteren Abschnitt Custom SQL.

Über Merging

Die Zusammenführung gewährleistet eine Deltaverarbeitung: neue Datensätze werden in die Datenbank eingefügt und/oder bestehende Datensätze werden aktualisiert. Mehr Details im Abschnitt Daten zusammenführen (mergen).

Custom SQL #

Die Option Custom SQL ermöglicht die Erstellung benutzerdefinierter SQL-Anweisungen. Vorhandene SQL-Befehle können als Vorlagen verwendet werden:

  1. Wählen Sie im Unterabschnitt z.B. Preparation die Option Custom SQL (1) aus der Dropdown-Liste.
  2. Klicken Sie auf [Edit SQL]. das Fenster “Edit SQL” wird geöffnet. Formula-ExistsTable
  3. Navigieren Sie zum Dropdown-Menü und wählen Sie einen vorhandenen Befehl (3).
  4. Klicken Sie auf [Generate Statement]. Eine neue Anweisung wird generiert. Formula-ExistsTable
  5. Klicken Sie auf [Copy] um die Anweisung in den Zwischenspeicher zu kopieren.
  6. Klicken Sie zur Bestätigung auf [OK].
Vorlagen

Sie können eigene SQL-Ausdrücke schreiben und haben damit die Möglichkeit, das Laden der Daten an Ihre Bedürfnisse anzupassen.
Darüber hinaus können Sie z.B. auch auf der Datenbank bestehende “Stored Procedures” ausführen. Dafür können Sie die vordefinierten SQL-Vorlagen der folgenden Phasen verwenden:

  • Preparation (z.B. Drop & Create oder Create if Not Exists)
  • Row Processing (z.B. Insert oder Merge) und
  • Finalization

Hinweis: Für nähere Informationen zu benutzerdefinierten SQL-Anweisungen, siehe Custom SQL.

Transaction style #

Hinweis: Je nach Destination variieren die verfügbaren Optionen für Transaction Style.

One Transaction
Preparation, Row Processing und Finalization werden in einer einer einzigen Transaktion ausgeführt.
Vorteil: sauberer Rollback aller Änderungen.
Nachteil: ggf. umfangreiches Locking während der gesamten Extraktionsdauer

Three Transactions
Prepare, Row Processing und Finalization werden jeweils in einer eigenen Transaktion ausgeführt.
Vorteil: sauberer Rollback der einzelnen Abschnitte, evtl. kürzere Locking-Phasen als bei One Transaction (z. B. bei DDL in Preparation wird die gesamte DB nur bei Preparation gelockt und nicht für die gesamte Extraktionsdauer)
Nachteil: Kein Rollback von vorangegangen Schritt möglich (Fehler im Row Processing rollt nur Änderungen aus Row Processing zurück, nicht aus Preparation).

RowProcessingOnly
Nur Row Processing wird in einer Transaktion ausgeführt. Preparation und Finalization ohne explizite Transaktion (implizite commits).
Vorteil: DDL in Perparation und Finalization bei DMBS, die kein DDL in expliziten Transaktionen zulassen (z. B. AzureDWH).
Nachteil: Kein Rollback von Preparation/Finalization.

No Transaction
Keine expliziten Transaktionen.
Vorteil: Keine Transaktionsverwaltung durch DBMS benötigt (Locking, DB-Transaktionslog, etc.). Dadurch kein Locking und evtl. Performanzvorteile.
Nachteil: Kein Rollback.

Daten Mergen #

Das folgende Beispiel zeigt die Aktualisierung der vorhandenen Datensätze in einer Datenbank durch Ausführen einer Extraktion. Dabei geht es um Zusammenzuführen (Merge) der Daten, d.h. z.B. den Wert eines Feldes zu ändern oder eine neue Datenzeile einzufügen oder eine vorhandene zu aktualisieren.

Alternativ zum Zusammenführen (Merge) können die Datensätze durch einen “Full Load” aktualisiert werden. Das Full-Load-Verfahren ist weniger effizient und performant.

Voraussetzung für das Zusammenführen (Merge) ist eine Tabelle mit vorhandenen Daten, in welche neue Daten zusammengeführt werden sollen.

Im Idealfall wird die Tabelle mit den vorhandenen Daten im initialen Lauf mit der dazugehörigen Option Preparation erstellt und durch die Option Insert in Row Processing befüllt.

Warnung! Fehlerhaftes Zusammenführen
Ein Primärschlüssel ist eine Voraussetzung für einen Merge-Befehl. Wenn kein Primärschlüssel gesetzt ist, läuft der Zusammenführungsbefehl in einen Fehler. Erstellen Sie einen entsprechenden Primärschlüssel in General Settings, um den Merge-Befehl ausführen zu können.

Aktualisierter Datensatz in SAP #

Ein Feldwert innerhalb einer SAP-Tabelle wird aktualisiert. Mit einem Merge-Befehl wird der aktualisierte Wert in die Zieldatenbanktabelle geschrieben. Update-Merge-Example-Data

Der Merge-Befehl gewährleistet eine Deltaverarbeitung: neue Datensätze werden in die Datenbank eingefügt und/oder bestehende Datensätze aktualisiert.

Merge-Befehl in Xtract Universal #

Der Merge-Prozess wird mit Hilfe einer Staging-Tabelle durchgeführt und erfolgt in drei Schritten. Im ersten Schritt wird eine temporäre Tabelle angelegt, in die die Daten im zweiten Schritt eingefügt werden. Im dritten Schritt wird die temporäre Tabelle mit der Zieltabelle zusammengeführt und anschließend wird die temporäre Tabelle gelöscht.

  1. Wählen Sie im Hauptfenster des Designers die entsprechende Extraktion aus und klicken Sie auf [Destination]. Das Fenster “Destination Settings” wird geöffnet.
  2. Stellen Sie sicher, dass Sie die passende Destination wählen: eine Datenbankdestination.
  3. Navigieren Sie zum rechten Teil des Fensters “Destination Settings” und wenden Sie die folgenden Einstellungen an:
    • Preparation: Prepare Merge, um eine temporäre Staging-Tabelle zu erstellen
    • Row Processing: Fill merge staging table, um die Staging-Tabelle mit Dateien zu befüllen
    • Finalization: Finalize Merge, um die Staging-Tabelle mit der Zieldatenbanktabelle zusammenzuführen und anschließend die Staging-Tabelle zu löschen. Extraction-Specific-Settings-Merge-Makt

Weitere Informationen über die aktualisierten Felder finden Sie in der SQL-Anweisung (nur Custom SQL).
Es ist möglich, die SQL-Anweisung bei Bedarf zu bearbeiten, z.B. bestimmte Spalten von der Aktualisierung auszuschließen.
Felder, die nicht in der SQL-Anweisung erscheinen, sind von den Änderungen nicht betroffen.

Custom SQL #

Custom SQL Statement - Benutzerdefinierte SQL-Anweisung #

Im Fenster Destination settings können Sie eine benutzerdefinierte SQL-Anweisung für die drei verschiedenen Datenbank-Prozessschritte verwenden und / oder die SQL-Anweisung an Ihre Anforderungen anpassen. Destination-Settings

  1. Wählen Sie eine bestimmte Extraktion (1).
  2. Klicken Sie auf [Destination] (2), das Fenster “Destination Settings” wird geöffnet.
  3. Wählen Sie die Option Custom SQL aus der Dropdown-Liste (3) in einem der folgenden Abschnitte:
    • Preparation
    • Row Processing
    • Finalization
  4. Klicken Sie auf [Edit SQL] (4). Das Fenster “Edit SQL” öffnet sich.

Custom SQL Beispiel #

Im folgenden Beispiel wird die DataSource 0FI_AP_4 um eine Spalte mit dem benutzerdefinierten Laufzeitparameter RUNTIMEPARAMETER erweitert.
Das Füllen der neuen Spalte wird im Abschnitt Finalisierung der Destinationseinstellungen dynamisch implementiert.

  1. Deselektieren Sie die Option Error on Column Count Mismatch im XTRACT_UNIVERSAL File Format. File-Format-Option
  2. Legen Sie den Laufzeitparameter RUNTIMEPARAMETER über die Schaltfläche Edit runtime parameter (5) an. Edit-Runtime-Parameter
  3. Hinterlegen Sie den Laufzeitparameter über die Schaltfläche Edit in der Spalte Selections (7). Edit-Selections
  4. Navigieren Sie zu den Destination Settings und wählen Sie im Abschnitt Preparation die Option Custom SQL. Klicken Sie auf Edit SQL.
  5. Wählen Sie im Dropdown-Menü die Option Drop & Create und klicken Sie auf [Generate Statement] (10). Edit-Preparation-Statement
  6. Fügen Sie dem generierten Statement die folgende Zeile hinzu.
    "RUNTIMEPARAMETER" VARCHAR(4),
    
  7. Bestätigen Sie mit [OK].
  8. Im Abschnitt Row Processing werden die Spaltenwerte aus SAP in eine lokale CSV-Datei prozessiert. Daher wird dieses SQL-Statement auf dem Standard Copy file to table belassen.
    Zu diesem Zeitpunkt werden keine Daten aus dem SAP-Quellsystem, sondern NULL Werte in die neu angelegte Spalte RUNTIMEPARAMETER geschrieben.
  9. Im Abschnitt Finalization werden die NULL Werte mit der folgenden SQL-Anweisung des Laufzeitparameters RUNTIMEPARAMETER befüllt und durch den T-SQL Befehl UPDATE in die SQL-Zieltabelle geschrieben. Edit-Finalization-Statement
    UPDATE "0FI_AP_4"
    SET RUNTIMEPARAMETER= '@RUNTIMEPARAMETER'
    WHERE RUNTIMEPARAMETER IS NULL;
    
  10. Führen Sie die Extraktion über Run (11) aus und geben Sie einen geeigneten Wert für den Laufzeitparameter (12) an. Run-Dialog

Ergebnis überprüfen #

Überprüfen Sie die Existenz der erweiterten Spalte RUNTIMEPARAMETER in der Snowflake Console der Tabelle 0FI_AP_4. Result-Snowflake-Console