Data Science

HANA XSA-Umgebung: Graph Pattern Matching

Pattern Matching ist eine Art der Graphenabfrage, die dabei hilft, Beziehungen zu verstehen, Muster zu erkennen und Teilgraphen zu finden, die dem vorgegebenen Muster entsprechen. Muster sind eine Kombination aus Kanten und Knoten. Ein Knoten ist ein Ziel oder eine Quelle einer Kante. Zum Beispiel kann man mit einem SBB-Zug (Attribut einer Kante) von Bern (Scheitelpunkt) nach Zürich (Scheitelpunkt) fahren. Um das Ganze nun zu vergrößern, gibt es viele Ziele, viele Routen und verschiedene Verkehrsmittel. Oft ist es notwendig, komplexe Berechnungen durchzuführen, um alle Muster für die gestellte Frage zu finden. Dieser Blog gibt einen Überblick über die Möglichkeiten, den Musterabgleich mit nativen HANA-Methoden wie einer Berechnungsansicht durchzuführen. In diesem Blog wird sowohl eine visuelle als auch eine Code-Methode für den Musterabgleich im Detail beschrieben.

In der HANA XS Advanced Modeling Environment können Graph-Knoten verwendet werden, um die Vorteile fortschrittlicher Graph-Algorithmen zu nutzen. Als erster Schritt einer Berechnungsansicht kann diese Art von Knoten verwendet werden, um deren grundlegende Fähigkeiten zu erweitern. Zu diesem Zweck stehen integrierte Funktionen wie kürzester Pfad, Nachbarschaft, stark verbundene Komponenten und Mustervergleiche zur Verfügung.

Das Pattern Matching kann entweder mit dem Visual Editor oder mit Cypher Code durchgeführt werden. Beachte, dass in beiden Fällen ein Graph Workspace im angegebenen HDI Container vorhanden sein muss.

Graphenknoten in Berechnungsansichten für Mustervergleiche

Der grafische Editor ermöglicht eine unkomplizierte Gestaltung von Graphen. In diesem Fall können alle Eckpunkte und Kanten in einer grafischen Umgebung definiert werden. Auf ähnliche Weise können auch Eckpunkt- oder Kantenfilter festgelegt werden. Für diese Zwecke kann ein Eingabeparameter oder ein fester Wert genommen werden. Schließlich können alle erforderlichen Ausgabespalten in dieser Umgebung ausgewählt und zugeordnet werden.

Wenn du einen Diagrammknoten in einer Berechnungsansicht hinzufügst, muss er der Anfangsknoten sein. Es können keine Operationen, wie Aggregationen oder Projektionen, vor ihm verwendet werden. Du kannst so viele Knoten und Kanten hinzufügen, wie nötig. Sobald dies geschehen ist, können Filter verwendet werden. Im folgenden Beispiel wurde ein zusätzlicher Filter auf die Attribute einer Kante E1 oder eines Scheitelpunkts V2 definiert, indem ein Eingabeparameter des Endnutzers oder einige feste Werte verwendet wurden. So können zum Beispiel bestimmte Entitäten herausgefiltert werden. Alle erforderlichen Ausgabespalten können dann auf der Registerkarte Mapping ausgewählt werden.

Das folgende Beispiel zeigt die Suche nach einem Untergraphen mit drei Knoten und zwei Kanten, der die folgenden Kriterien erfüllt.

1. Einer der Eckpunkte ist das Ziel der beiden Kanten (E1 und E2)
2. Eine der Kanten hat den Attributwert SBB und die andere Swiss Air Lines (SWISS)

Im Grunde suchen wir nach einem Ziel, das von SWISS und SBB erreicht werden kann. Nachdem die grundlegende Logik definiert wurde, kann sie auf große Datenmengen angewandt werden, um alle Teilgraphen zu finden, die die definierten Kriterien erfüllen.

Abbildung 2 Grafischer Mustervergleich (Pattern Matching)

Cypher Code für Mustervergleiche

Graphen können auch mit der Cypher-Sprache abgefragt und aktualisiert werden. Cypher ist eine deklarative Sprache, daher liegt der größte Vorteil in ihrer Einfachheit. Cypher ermöglicht komplexe Datenbankabfragen, so dass keine zusätzliche Backend-Konfiguration erforderlich ist. Ein weiterer Vorteil von Cypher ist seine Open-Source-Eigenschaft. Seit Ende 2015 wurde es von vielen DB-Anbietern angepasst. Einer von ihnen ist SAP mit seiner bekannten HANA-Datenbank. Hierfür kann ein integrierter Graphknoten für Berechnungsansichten verwendet werden, in dem sowohl ein grafischer als auch ein Pattern-Cypher-Editor zur Verfügung stehen.

Die Syntax besteht hier aus zwei Klauseln. Einer MATCH- und einer RETURN-Klausel. Zunächst werden alle Eckpunkte und Pfade identifiziert. Zusätzlich kann sie mit den optionalen SQL-ähnlichen "WHERE"-Bedingungen erweitert werden. In diesem Zusammenhang können ", =,<,>, <>,>=, <= " für Vergleiche und die Schlüsselwörter "AND", "OR" und "NOT" für boolesche Operatoren verwendet werden.

Eine RETURN-Klausel schließlich gibt alle Ausgabespalten an, die für das Ergebnis relevant sind. Das folgende Beispiel veranschaulicht den gleichen Musterabgleich, wie er mit dem "Grafischen Muster-Editor" durchgeführt wird.

Es ist erwähnenswert, dass cypher die Einzigartigkeit der Kanten erzwingt, obwohl die Eckpunkte unterschiedlich sein können. Das ermöglicht mehr Flexibilität im Gegensatz zum Standard-Mustervergleich. Wie erwartet, besteht die Syntax aus Vertex-Edge-Vertex, wobei die Teilgraphen durch ein Komma getrennt werden, die Knoten in "()" und die Kanten in "[]" geschrieben werden, wie im obigen Beispiel gezeigt. Die Länge des Pfades ist jedoch auf 15 begrenzt.

Sobald alle notwendigen Komponenten eines Cypher-Statements gesetzt sind, kann die Ausgabespalte wie in der Abbildung unten dargestellt erzeugt werden:

Abbildung 3 Musterabgleich mit Cypher Code

Seit SPS04 kann eine eingebaute "OPENCYPHER_TABLE" Funktion direkt für den Mustervergleich in einem SQL-Ausdruck verwendet werden. In diesem Fall kann die folgende Syntax verwendet werden:

SELECT * FROM OPENCYPHER_TABLE (GRAPH WORKSPACE "SCHEMA". "WORKSPACE_NAME" QUERY ' Custom Cypher expression ');

Außerdem wird das SAP HANA Graph Reference Guide empfohlen, wenn du dich mit dieser Methode befasst.

Vahan Nersesyan

Vahan Nersesyan

Analytics Consultant

Mehr getIT-Beiträge

Bereit für Swisscom

Finde deinen Job oder die Karrierewelt, die zu dir passt. In der du mitgestalten und dich weiterentwickeln willst.

Was du draus machst, ist was uns ausmacht.

Zu den Karrierewelten

Zu den offenen Security Stellen