Zu Hauptinhalt springen Zu ergänzendem Inhalt springen

Hinzufügen von SQL-Umwandlungen

Sie können SQL-basierte Tabellen in Umwandlungsaufgaben aufnehmen. Mit einer SQL-Umwandlung können Sie eine SQL SELECT-Abfrage in eine Pipeline eingeben, um komplexe oder einfache Umwandlungen zu definieren. Sie können auch Makros verwenden, um die auszuführende Abfrage anzupassen, wenn ein anfänglicher Ladevorgang oder ein inkrementeller Ladevorgang durchgeführt wird.

Weitere Informationen zum Erstellen einer Transformationsaufgabe finden Sie unter Umwandeln von Daten.

Hinzufügen einer SQL-Umwandlung

So fügen Sie eine SQL-Umwandlung in einer Umwandlungs-Datenaufgabe hinzu:

  1. Wählen Sie bei Umwandeln die Datensätze, die in die Abfrage eingeschlossen werden sollen, und klicken Sie auf SQL-Umwandlung hinzufügen.

    SQL-Umwandlung hinzufügen wird angezeigt. Dort können Sie Einstellungen für die Umwandlung angeben.

  2. Geben Sie einen Namen für den Zieldatensatz in Name ein.

    Sie können auch eine längere Beschreibung in Beschreibung hinzufügen.

  3. Wählen Sie bei der Materialisierung aus, ob die umgewandelte Ausgabe materialisiert werden soll oder nicht. Sie können sich entscheiden, die Einstellung aus den Datenaufgabeneinstellungen zu übernehmen.

    • Mit Ein werden Tabellen erstellt und verbundene ELT-Prozesse verarbeitet.

    • Durch Aus werden Ansichten erstellt, die Umwandlungen spontan durchführen.

  4. Inkrementelles Laden ermöglicht es Ihnen, die Abfrage für einen inkrementellen Datenladevorgang anzupassen, indem Sie Filter oder andere Bedingungen anwenden, um den gerade verarbeiteten Datensatz mithilfe von Makros zu reduzieren. Inkrementelles Laden ist nur verfügbar, wenn die Daten als Tabellen materialisiert werden.

    • Wenn Inkrementelles Laden auf Ein steht

      Bei der ersten Ausführung der Aufgabe wird ein anfänglicher Ladevorgang durchgeführt. Dadurch werden alle Ergebnisse der Abfrage in Ihre Zieltabelle eingefügt. Nachfolgende Ausführungen führen inkrementelle Ladevorgänge durch, wobei Filter oder bestimmte Bedingungen genutzt werden, die Sie für die inkrementelle Verarbeitung definiert haben. Während des inkrementellen Ladevorgangs verarbeitet die Aufgabe nur Daten als Update oder Einfügung.Löschungen werden nicht verwaltet.

    • Wenn Inkrementelles Laden auf Ein steht

      Bei der ersten Ausführung der Aufgabe wird ein anfänglicher Ladevorgang durchgeführt. Dadurch werden alle Ergebnisse der Abfrage in Ihre Zieltabelle eingefügt. Nachfolgende Ausführungen führen alle Ergebnisse der Anforderung aus, indem sie sie mit Ihrer Zieltabelle vergleichen und Datensätze verarbeiten, die neu, verändert oder gelöscht sind.

    InformationshinweisSetzen Sie Inkrementelles Laden auf „Aus“, wenn die Abfrage alle Datensätze auswählt, die im Ziel vorhanden sein sollen. Nicht ausgewählte Datensätze werden im Ziel gelöscht.
  5. Klicken Sie auf Hinzufügen, wenn Sie zum Erstellen der SQL-Umwandlung bereit sind.

    SQL-Umwandlung bearbeiten wird angezeigt.

  6. Geben Sie die Abfrage zum Zurückgeben der SQL-basierten Tabelle in SELECT-Abfrage ein.

    Die Abfrage kann nur aus den ausgewählten Quelldatensätzen gelesen werden, aber Sie können mit Hinzufügen weitere Quelldatensätze hinzufügen.

    Sie können aus den Datasets und den Spalten auswählen.

  7. Falls ein inkrementeller Ladevorgang verwendet wird, können Sie Makros verwenden, um die auszuführende Abfrage zu adaptieren, wenn ein anfänglicher oder ein inkrementeller Ladevorgang durchgeführt wird.

    Weitere Informationen finden Sie unter Verwenden von Makros zur Adaptierung der Abfrage an den Ladetyp.

  8. Klicken Sie auf Parameter extrahieren, um die Parameter in der SELECT-Abfrage zu analysieren.

    Die Parameter sollten zu Quell- oder Zielobjekten zugewiesen werden. Sie können eine Zuweisung durchführen auf

    • Verlaufsstrukturen des Typs 2 (_history)

    • Aktuelle Strukturen

    • Zielobjekte

      Sie können Zielobjekte nur zuweisen, wenn ein Parameter innerhalb eines inkrementellen Makros definiert ist.

    TipphinweisSie können einen Parameter durch eine Referenz ersetzen, um eine Abfrage zu erhalten, die einfacher lesbar ist. Ändern Sie den Wert in Parameter. Die Referenz in der SELECT-Abfrage ändert sich dann auch.
  9. Klicken Sie auf Tabelle beschreiben, um eine Vorschau der Ausgabemetadaten der Abfrage zu erhalten.

    Sie können auch eine Vorschau der Ergebnisse anzeigen, die Beispieldaten verwendet.

    Datenvorschau

  10. Stellen Sie sicher, dass die Tabelle über einen Primärschlüssel verfügt.

    Sie können auch die Metadateneinstellungen bearbeiten.

    • Legen Sie Primärschlüssel in der Spalte Schlüssel fest.

    • Legen Sie in der Spalte Nullwertfähig fest, ob die Spalte nullwertfähig ist.

    • Wählen Sie eine Spalte aus und klicken Sie auf Bearbeiten, um den Spaltennamen, die Nullwertfähigkeit und den Datentyp festzulegen.

  11. Wenn Sie mit den Ergebnissen der Abfrage zufrieden sind, klicken Sie auf OK. Der Datensatz wird nun zur Liste der Ziele hinzugefügt und kann in einer Vorschau angezeigt werden.

Datenvorschau

Sie können eine Vorschau der Ergebnisse anzeigen, die Beispieldaten verwendet.

InformationshinweisDatenvorschau muss auf Mandantenebene in Qlik Management Console aktiviert werden. Die Option Anzeigen von Daten in Datenintegration finden Sie in Einstellungen unter Funktionssteuerung.

Ihnen müssen die folgenden Rollen zugewiesen sein, um eine Vorschau der Daten anzeigen zu können:

  • Kann Daten anzeigen in dem Bereich, in dem sich die Datenverbindung befindet.

  • Kann anzeigen in dem Bereich, in dem sich das Datenprojekt befindet.

So zeigen Sie eine Vorschau der Ergebnisse an:

  • Klicken Sie auf Daten anzeigen.

Ergebnisse für Beispieldaten werden angezeigt. Mit Zeilenanzahl können Sie festlegen, wie viele Datenzeilen in das Beispiel eingeschlossen werden sollen.

Sie können die Beispieldaten auf zwei Arten filtern:

  • Verwenden Sie Filter, um zu filtern, welche Beispieldaten abgerufen werden.

    Wenn Sie beispielsweise den Filter ${OrderYear}>2023 verwenden und Zeilenanzahl auf 10 festlegen, erhalten Sie beispielhaft 10 Bestellungen des Jahres 2024.

  • Filtern Sie die Beispieldaten nach einer bestimmten Spalte.

    Dies betrifft nur die vorhandenen Beispieldaten. Wenn Sie Filter verwendet haben, um nur Bestellungen aus 2024 einzuschließen, und den Spaltenfilter auf de Anzeige von Bestellungen aus 2022 festlegen, ist das Ergebnis ein leeres Beispiel.

Sie können die Beispieldaten nach einer bestimmten Spalte filtern. Die Sortierung betrifft nur die vorhandenen Beispieldaten. Wenn Sie Filter verwendet haben, um nur Bestellungen aus 2024 einzuschließen, und die Sortierreihenfolge umkehren, enthalten die Beispieldaten immer noch nur Bestellungen aus 2024.

Verwenden von Makros zur Adaptierung der Abfrage an den Ladetyp

Falls ein inkrementeller Ladevorgang verwendet wird, können Sie Makros verwenden, um die auszuführende Abfrage zu adaptieren, wenn ein anfänglicher oder ein inkrementeller Ladevorgang durchgeführt wird.

Wählen Sie das Makro und fügen Sie die Abfrage innerhalb der entsprechenden Bedingung hinzu.

  • Q_RUN_INCREMENTAL fügt eine Bedingung hinzu, bei der Sie eine Abfrage absetzen können, die nur ausgeführt wird, wenn ein inkrementeller Ladevorgang durchgeführt wird.

  • Q_RUN_INITIAL_LOAD fügt eine Bedingung hinzu, bei der Sie eine Abfrage absetzen können, die nur ausgeführt wird, wenn ein anfänglicher Ladevorgang durchgeführt wird.

Sie müssen die komplette Abfrage bei jedem Makro angeben. Sie können den Code basierend auf Ihrem Anwendungsfall anpassen oder hinzufügen.

Anwendungsfall: Inkrementeller Filter mithilfe des Datumsbereichs:

In diesem Anwendungsfall muss ein Bestelldatensatz mit benutzerdefiniertem SQL umgewandelt werden. Da es sich um einen großen Datensatz handelt, ist es ratsam, inkrementelle Filter einzuschließen, um sicherzustellen, dass der inkrementelle Ladevorgang nur Bestellungen aus den vergangenen 12 Stunden berücksichtigt.

Dies ist die grundlegende Abfrage:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT , OD.LAST_UPDATE_DTM FROM “mydb”.”myStorageTask”.”ORDER” O JOIN “mydb”.”myStorageTask”.”ORDER_DETAIL” OD ON O.ORDER_ID = OD.ORDER_ID

Dies ist der Filter, der während des inkrementellen Laufs angewendet werden soll, wobei Sie nur Bestellungen berücksichtigen, die in den letzten 12 Stunden hinzugefügt wurden:

WHERE OD.UPDATE_DTM > DATEADD(hour, -12, CURRENT_TIMESTAMP())
TipphinweisWenn eine SQL-basierte Tabelle implementiert werden soll, wird empfohlen, die Tabellennamen durch die Notation ${TABLE} zu ersetzen. Dadurch wird eine harte Codierung von Datenbank- und Schemanamen verhindert, was sich von Umgebung zu Umgebung ändern kann, zum Beispiel bei der Umstellung von der Entwicklung auf die Produktion.

Dies ist die komplette Abfrage, unter Verwendung des Filtermakros und nach der Ersetzung der Tabellennamen durch die Notation ${TABLE}:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT , OD.LAST_UPDATE_DTM FROM ${ORDER} O JOIN ${ORDER_DETAIL} OD ON O.ORDER_ID = OD.ORDER_ID {{#QLIK_FUNC_IF Q_RUN_INCREMENTAL}} WHERE OD.UPDATE_DTM > DATEADD(hour, -12, CURRENT_TIMESTAMP() ) {{/QLIK_FUNC_IF}}

Dadurch wird eine Abfrage zum anfänglichen Laden erstellt:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT , OD.LAST_UPDATE_DTM FROM ${ORDER} O JOIN ${ORDER_DETAIL} OD ON O.ORDER_ID = OD.ORDER_ID

Und eine Abfrage zum inkrementellen Laden:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT , OD.LAST_UPDATE_DTM FROM ${ORDER} O JOIN ${ORDER_DETAIL} OD ON O.ORDER_ID = OD.ORDER_ID WHERE OD.UPDATE_DTM > DATEADD(hour, -12, CURRENT_TIMESTAMP() )

Anwendungsfall: Inkrementeller Filter unter Verwendung von Daten im Ziel :

In diesem Anwendungsfall muss ein Bestelldatensatz mit benutzerdefiniertem SQL umgewandelt werden. Da Bestellungen große Datensätze sind, ist es ratsam, inkrementelle Filter einzuschließen, um sicherzustellen, dass der inkrementelle Ladevorgang nur Sätze aus Bestelldetails berücksichtigt, die neuer sind als die Daten in der Zieltabelle. Es wird auch empfohlen zu markieren, ob eine Zeile vom anfänglichen oder von einem inkrementellen Ladevorgang verarbeitet wurde.

InformationshinweisWie in diesem Beispiel zu sehen ist, können die Makros verwendet werden, um einen Teil der Abfrage für das anfängliche oder das inkrementelle Lade anzupassen.

Dies ist die grundlegende Abfrage:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT , OD.LAST_UPDATE_DTM FROM “mydb”.”myStorageTask”.”ORDER” O JOIN “mydb”.”myStorageTask”.”ORDER_DETAIL” OD ON O.ORDER_ID = OD.ORDER_ID

Dies ist der Filter, der während des inkrementellen Laufs angewendet werden soll. “ORDERS_DERIVED” ist der Name des Ziel-Datensatzes.

WHERE OD.UPDATE_DTM > = (SELECT MAX(LAST_UPDATE_DTM) FROM “mydb”,”myTrasformTask”.”ORDERS_DERIVED” )
TipphinweisDer inkrementelle Ladevorgang kann auch eine Notation ${TABLE} auf die Zielobjekte abbilden, die von der Umwandlungsaufgabe erstellt wurden.

Dies ist die komplette Abfrage, unter Verwendung des Filtermakros und nach der Ersetzung der Tabellennamen durch die Notation ${TABLE}. LOADED_BY wird auf INIT gesetzt, falls der Ladevorgang anfänglich ist, und auf INCR, falls der Ladevorgang inkrementell ist:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT, OD.LAST_UPDATE_DTM, {{#QLIK_FUNC_IF Q_RUN_INITIAL_LOAD}} ‘INIT’ as LOADED_BY {{/QLIK_FUNC_IF}} {{#QLIK_FUNC_IF Q_RUN_INCREMENTAL}} ‘INCR’ as LOADED_BY {{/QLIK_FUNC_IF}} FROM ${ORDER} O JOIN ${ORDER_DETAIL} OD ON O.ORDER_ID = OD.ORDER_ID {{#QLIK_FUNC_IF Q_RUN_INCREMENTAL}} WHERE OD.UPDATE_DTM >= (SELECT MAX(LAST_UPDATE_DTM) FROM ${TARGET_TABLE} ) {{/QLIK_FUNC_IF}}

Dadurch wird eine Abfrage zum anfänglichen Laden erstellt:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT, OD.LAST_UPDATE_DTM, ‘INIT’ as LOADED_BY FROM ${ORDER} O JOIN ${ORDER_DETAIL} OD ON O.ORDER_ID = OD.ORDER_ID

Und eine Abfrage zum inkrementellen Laden:

SELECT O.ORDER_ID, O.CUSTOMER_ID, OD.PRODUCT_ID, OD.QUANTITY, O.AMOUNT, OD.LAST_UPDATE_DTM, ‘INCR’ as LOADED_BY FROM ${ORDER} O JOIN ${ORDER_DETAIL} OD ON O.ORDER_ID = OD.ORDER_ID WHERE OD.UPDATE_DTM >= (SELECT MAX(LAST_UPDATE_DTM) FROM ${TARGET_TABLE} )

Best Practices

  • Wenn Sie eine SQL-Umwandlung hinzufügen, wird nicht automatisch ein Primärschlüssel definiert. Fügen Sie auf der Registerkarte Datensatz einen Schlüssel zum Datensatz hinzu.

  • Erstellen Sie keine Spaltenüberschriften manuell in der umgewandelten Ausgabe.

  • Vermeiden Sie es, SELECT mit * zu verwenden, da in diesem Fall bei jeder Ausführung der Abfrage unterschiedliche Spalten zurückgegeben werden können. Wenn sich das Schema geändert hat, ändern Sie die Abfrage entsprechend und führen Sie Tabelle beschreiben erneut aus. Dann können Sie Spalten bearbeiten und Tabellen anpassen.

Hat diese Seite Ihnen geholfen?

Wenn Sie Probleme mit dieser Seite oder ihren Inhalten feststellen – einen Tippfehler, einen fehlenden Schritt oder einen technischen Fehler –, teilen Sie uns bitte mit, wie wir uns verbessern können!