Filtern und Sortieren von Datenbankdaten
Um Datenbankdaten zu filtern und zu sortieren, verwenden Sie eine SQL/NoSQL-WHERE/ORDER-Komponente. Auf diese Art können Sie manuell eine SQL WHERE-Klausel eingeben, die die Daten filtert. Optional dazu können Sie auch eine ORDER BY-Klausel definieren, wenn Sie die Datensätze nach einem bestimmten Datenbankfeld in auf- oder absteigender Ordnung sortieren möchten.
Die SQL/NoSQL-WHERE/ORDER-Komponente muss mit einer Tabelle oder einem Feld einer Datenbank-Mapping-Komponente verbunden werden. Sie können eine SQL/NoSQL-WHERE/ORDER-Komponente auch mit einer Join-Komponente verbinden, wenn die verknüpfte Gruppe bzw. die verknüpften Datensätze gefiltert werden sollen (siehe Verknüpfen von Datenbankdaten mittels Join).
Hinzufügen einer SQL/NoSQL-WHERE ORDER-Komponente
Um eine SQL/NoSQL-WHERE/ORDER-Komponente zum Mapping hinzuzufügen, gehen Sie folgendermaßen vor:
1.Gehen Sie zum Menü Einfügen und klicken Sie auf SQL/NoSQL-WHERE/ORDER. Standardmäßig hat diese Komponente die folgende Struktur:
2.Verbinden Sie eine Tabelle oder ein Feld der Quelldatenbank mit dem Datenelement table/field der SQL/NoSQL-WHERE/ORDER-Komponente. Das Beispielmapping FilterDatabaseRecords.mfd (siehe Abbildung unten) dazu finden Sie im folgenden Ordner: <Dokumente>\Altova\MapForce2025\MapForceExamples\. In diesem Mapping nimmt die SQL/NoSQL-WHERE/ORDER-Komponente die Daten aus der Quelltabelle users, filtert alle Datensätze und wählt nur diejenigen aus, deren Nachname mit dem Buchstaben "M" beginnt (siehe Erläuterung im Unterabschnitt weiter unten).
3.Doppelklicken Sie auf die Überschrift der SQL/NoSQL-WHERE/ORDER-Komponente. Klicken Sie alternativ dazu mit der rechten Maustaste darauf und wählen Sie im Kontextmenü den Befehl Eigenschaften. Daraufhin wird das Dialogfeld SQL/NoSQL-WHERE/ORDER-Eigenschaften geöffnet.
4.Geben Sie eine SQL WHERE-Klausel in das Textfeld oben ein. In unserem Beispiel lautet die SQL Where-Klausel folgendermaßen: last_name LIKE :sqlparam. Geben Sie optional eine ORDER BY-Klausel ein. In der Abbildung oben sehen Sie die im Mapping FilterDatabaseRecords.mfd definierte WHERE- und ORDER BY-Klausel (dieses Einstellungen werden weiter unten beschrieben). Weitere Beispiele finden Sie unter Erstellen von WHERE- und ORDER BY-Klauseln.
Parameter in SQL/NoSQL-WHERE/ORDER-Komponenten
In der SQL/NoSQL-WHERE/ORDER-Komponente aus dem Mapping FilterDatabaseRecords.mfd ist die folgende WHERE-Klausel definiert: last_name LIKE :sqlparam, wobei sich last_name auf den Namen des Datenbankfelds in der verbundenen Tabelle bezieht und LIKE ein SQL-Operator ist; :sqlparam erstellt im Mapping einen Parameter namens sqlparam.
Parameter in der SQL/NoSQL-WHERE/ORDER-Komponente sind optional. Sie sind nützlich, wenn Sie über das Mapping einen Wert an die WHERE-Klausel übergeben möchten. Ohne Parameter hätte die obige WHERE-Klausel folgendermaßen gelautet: Last LIKE "M%". Damit würden alle Personen, deren Nachname mit dem Buchstaben "M" beginnt, abgerufen. Um diese Abfrage noch flexibler zu gestalten, haben wir anstelle von "M%" einen Parameter hinzugefügt. Dadurch kann auch jeder andere Buchstabe aus dem Mapping bereitgestellt werden, z.B. "D", um durch Änderung einer Konstante oder eines Mapping-Input-Parameters Personen, deren Nachname mit "D" beginnt, abzurufen. Der Input-Buchstabe im obigen Mapping stammt aus einer Input-Komponente namens input. Wenn Sie auf die Titelleiste dieser Komponente doppelklicken und ihre Eigenschaften öffnen, sehen Sie, dass m zum Zeitpunkt des Designs als Ausführungswert angegeben wird (siehe Abbildung unten).
Das SQL-Platzhalterzeichen % wird im Mapping von einer Konstante bereitgestellt und anschließend mit Hilfe der concat-Funktion mit dem Parameterwert verkettet. Dies hat den Vorteil, dass man keine SQL-Platzhalterzeichen in die Befehlszeile eingeben muss, wenn dieses Mapping in einer andere Umgebung (z.B. MapForce Server) ausgeführt wird.
Aussehen von SQL/NoSQL-WHERE/ORDER-Komponenten
Das Aussehen von SQL/NoSQL-WHERE/ORDER-Komponenten ändert sich, je nachdem welche Einstellungen darin definiert sind. Auf diese Art sehen Sie gleich direkt im Mapping, was die SQL/NoSQL-WHERE/ORDER-Komponente tut (siehe Tabelle unten).
Es wurde eine WHERE-Klausel definiert. | |
Es wurde eine WHERE-Klausel mit einem Parameter definiert. Der Parametername ist unterhalb des Datenelements table/field zu sehen. | |
Es wurde eine WHERE-Klausel mit einem Parameter definiert. Zusätzlich dazu wurde eine ORDER BY-Klausel definiert. Die Sortierreihenfolge wird durch das Sortiersymbol A-Z angezeigt. |
Wenn Sie den Mauszeiger über die Titelleiste von SQL/NoSQL-WHERE/ORDER platzieren, wird ein Tooltip mit den verschiedenen definierten Klauseln angezeigt.
Filtern von Daten in Azure CosmosDB (Enterprise Edition)
Wenn der Name eines Containers in Ihrer CosmosDB Sonderzeichen enthält (z.B. +, -, @, usw.) oder ein Schlüsselwort ist, kann dieser Name in Abfragen nicht verwendet werden und Sie erhalten von der Datenbank einen Syntaxfehler. Zur Vermeidung potenzieller Probleme verwendet MapForce für CosmosDB-Abfragen die folgende Syntax:
SELECT * FROM ROOT AS c WHERE c.<field> ORDER BY c.<field>
Das Schlüsselwort ROOT in der FROM-Klausel referenziert den aktuell abgefragten Container. Da das Schlüsselwort ROOT nicht zum Adressieren von Feldern in WHERE- und ORDER BY-Klauseln verwendet werden kann, erhält der Container den Aliasnamen c, der dem Container über das Schlüsselwort AS zugewiesen wird. Durch Zuweisung eines Aliasnamens kann der Container-Inhalt gefiltert und sortiert werden.
Beachten Sie, dass allen Feldreferenzen im Dialogfeld WHERE/ORDER der Container-Aliasname c vorangestellt werden muss (siehe Beispiel unten).
SELECT * FROM ROOT AS c WHERE c.age > 20 ORDER BY c.name