Der folgende Abschnitt behandelt das Laden der SAP-Extraktionsdaten in Amazon Redshift.

Voraussetzungen #

  • Sie benötigen eine laufende Instanz und gültige Anmeldedaten.
  • Ihr Client-Rechner muss für den Zugriff auf den Cluster autorisiert sein.
  • Für den Aufbau einer Verbindung zu Redshift wird ein geeigneter Datenbanktreiber benötigt.
  • Laden Sie den 64-Bit-Amazon-Redshift-ODBC-Treiber von der offiziellen Website herunter und installieren Sie ihn.

Hinweis: Wenn der Treiber fehlt, schlägt der Verbindungstest fehl.

XU-fehlender-redshift-treiber

Vor Xtract Universal Version 2.102.0 müssen Sie die Mono.Security.dll Assembly anstelle des oben genannten ODBC-Treibers installieren. Sie können das komplette Mono-Paket von der offiziellen Projektseite des Herstellers, oder die Mono.Security.dll von einer beliebigen Quelle Ihrer Wahl herunterladen. Bitte stellen Sie sicher, dass Sie die Mono.Security-Assembly installieren, die auf .NET 2.0 kompiliert wurde. Andere Versionen könnten Probleme mit den Assemblies verursachen, die für den Zugriff auf die Redshift-Datenbank verwendet werden.

Installation #

Um die Datei zu installieren, gibt es zwei Möglichkeiten:

  1. Registrieren Sie die Mono.Security assembly im global assembly cache (gac):
    • Öffnen Sie ein Kommandozeilenfenster und wechseln Sie in das Xtract Universal Installationsverzeichnis
      cd "C:\Program Files\XtractUniversal"
    • Installieren Sie die Mono.Security.dll Datei mit Hilfe des gacutil in Ihren global assembly cache
      gacutil -i "C:\Program Files (x86)\Mono-2.0\lib\mono\2.0\Mono.Security.dll"
      Weitere Informationen finden Sie in dem Artikel über das Installieren einer Assembly im globalen Assemblycache.
  2. Kopieren Sie die Mono.Security.dll in das Xtract Universal Installationsverzeichnis.

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 #

XU_redshift_destination

Endpoint
Server-Adresse des Redshift-Systems.
(Zu finden in der Redshift Management Console)

Port
Portnummer für die Verbindung.

Username / Password
Benutzername und Passwort des Datenbanknutzers.

Database
Name der Datenbank, auf die zugegriffen werden soll.

Test Connection
Klicken Sie auf die Schaltfläche, um die Verbindung zu testen.

Einstellung #

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 #

ext_spec_set_de_form

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 #

Definiert die 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 Daten Mergen.
  • 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.

  • Insert: Datensätze einfügen (Default).
  • Fill merge staging table: Datensätze in die Staging-Tabelle einfügen.
  • None: keine Aktion.
  • Custom SQL: Hier können Sie eigenes Skript definieren. Siehe den unteren Abschnitt Custom SQL.
  • Merge (deprecated): Diese Option ist veraltet. Bitte nutzen Sie die Option Fill merge staging table und prüfen Sie den Abschnitt Über Merging.

Finalization - SQL Anweisungen #

Definiert die 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 Abschnitt Über Merging.
  • 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- oder Skriptausdrücke. 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]. Der Dialog “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].

Einzelheiten zu vordefinierten Ausdrücken finden Sie im Microsoft SQL Server Beispiel.

Note: Der benutzerdefinierte SQL-Code wird für SQL Server-Destinationen verwendet. Um den benutzerdefinierten SQL-Code für andere Datenbank-Destinationen zu verwenden, ist eine syntaktische Anpassung des Codes erforderlich.

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
Skript-Ausdrücke

Sie können Skript-Ausdrücke für die Custom-SQL-Befehle verwenden.

SQL-Skript
#{
   iif
   (
      ExistsTable("MAKT"),
      "TRUNCATE TABLE \"MAKT\";",
      "
         CREATE TABLE \"MAKT\"(
            \"MATNR\" VARCHAR(18),
            \"SPRAS\" VARCHAR(2),
            \"MAKTX\" VARCHAR(40));
      "
   )
}#

Tipp: Der Befehl ExistsTable(tableName) ermöglicht die Überprüfung des Vorhandenseins einer Tabelle in einer Datenbank.

Debugging #

Debugging

Warnung! Performance-Verlust (Leistungseinbuße)! Die Performance sinkt, wenn Bulk Insert deaktiviert ist. Deaktivieren Sie den Bulk Insert nur wenn es notwendig ist, z.B. auf Anfrage des Support-Teams.

Durch das Anhaken der Checkbox Disable bulk operations wird der standardmäßige Bulk Insert beim Schreiben auf die Datenbank deaktiviert.

Diese Option ermöglicht eine detaillierte Fehleranalyse, falls bestimmte Datenzeilen nicht auf der Datenbank persistiert werden können. Mögliche Ursachen für dieses Verhalten können fehlerhafte Werte im hinterlegten Datentyp sein.

Das Debugging sollte nach der erfolgreichen Fehleranalyse wieder deaktiviert werden, da ansonsten die Performance der Datenbank-Schreibprozesse dauerhaft niedrig bleibt.

Verwendung von Custom SQL

Hinweis: Bulk Operations werden beim Verwenden von Custom SQL Anweisungen (z.B. bei Row Processing) nicht unterstützt. Dies führt zu Performance-Verlust (Leistungseinbußen).

Tip: Um die Performance beim Verwenden von Custom SQL Anweisungen zu steigern, wird empfohlen die Custom-Verarbeitung im Finalization-Schritt zu verwenden.

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.

AnySQL Maestro konfigurieren #

Diese Anleitung zeigt, wie Sie AnySQL Maestro konfigurieren müssen, um auf Ihre Amazon Redshift Datenbank zugreifen zu können.
Sie können natürlich auch andere DB Clients verwenden. Die Einstellungen sollten zum Teil vergleichbar sein.

  • Zunächst müssen Sie AnySQL Maestro herunterladen und installieren. Link
  • Zusätzlich sollten Sie die neueste Version des PostgreSQL ODBC Treibers herunterladen und installieren. Link
  • Starten Sie AnySQL Maestro.
  • Klicken Sie auf “Create Database Profiles”.

RS-Configure-AnySQL-Add-Profile-Button

  • Im Create Database Profiles Wizard klicken Sie auf den Button neben dem Feld für den Connection String.

RS-Configure-AnySQL-Database-Profiles-Wizard

  • Gehen Sie auf “Connection”, wählen Sie “Use connection string” aus und klicken Sie anschließend auf “Build…”.
  • Gehen Sie auf “Machine Data Source” und klicken Sie auf “New…” (Unter Umständen erscheint ein Pop-Up Fenster mit einer Warnung. Dieses können Sie einfach mit einem Klick auf [OK] schließen)

  • Klicken Sie auf “Next” und wählen Sie “PostgreSQL Unicode”, anschließend klicken Sie auf “Next” und im nächsten Fenster auf “Finish”.

RS-Configure-AnySQL-Choose-Driver

  • Geben Sie Ihre Zugangsdaten ein, klicken Sie auf “Test” um sie zu überprüfen und speichern Sie die Daten mit “Save”.

RS-Configure-AnySQL-Enter-Credentials

  • Wählen Sie Ihre Verbindung aus und klicken Sie auf “Ok”.
  • Geben Sie den Datenbanknamen und Ihre Zugangsdaten ein und wählen Sie im Feld SSL-Mode “allow”, anschließend bestätigen Sie die Eingaben mit “Ok”.

  • Geben Sie Ihre Zugangsdaten ein und wählen Sie Ihren initial catalog, klicken Sie dann auf “Ok”.

RS-Configure-AnySQL-Data-Link-Properties

  • Klicken Sie auf “Next” und dann auf “Ready”.
  • Die Konfiguration ist abgeschlossen und Sie können nun auf Ihre Datenbank zugreifen.