Graphabfragen
DuckDB unterstützt Graphabfragen über die DuckPGQ-Community-Erweiterung, die die SQL/PGQ-Syntax aus dem Standard SQL:2023 implementiert.
Warning DuckPGQ ist eine Community-Erweiterung und befindet sich noch in aktiver Entwicklung. Sie ist in der aktuellen DuckDB-Version (1.5.x) nicht verfügbar. Wenn Sie mit DuckPGQ arbeiten möchten, verwenden Sie DuckDB v1.4.4. Zudem können einige Funktionen unvollständig sein. Den aktuellen Stand finden Sie auf der DuckPGQ-Website.
Graphabfragen ermöglichen es, Muster und Pfade in verbundenen Daten zu finden – etwa in sozialen Netzwerken, Finanztransaktionen oder Wissensgraphen – mit einer visuellen, intuitiven Syntax.
DuckPGQ installieren
INSTALL duckpgq FROM community;LOAD duckpgq;Einen Property Graph erstellen
Ein Property Graph besteht aus Vertices (Knoten) und Edges (Beziehungen). Sie legen ihn als Schicht über vorhandene Tabellen an:
CREATE TABLE Person (id BIGINT, name VARCHAR);CREATE TABLE Knows (person1_id BIGINT, person2_id BIGINT, since DATE);
INSERT INTO Person VALUES (1, 'Alice'), (2, 'Bob'), (3, 'Charlie');INSERT INTO Knows VALUES (1, 2, '2020-01-01'), (2, 3, '2021-06-15');
CREATE PROPERTY GRAPH social_networkVERTEX TABLES ( Person)EDGE TABLES ( Knows SOURCE KEY (person1_id) REFERENCES Person (id) DESTINATION KEY (person2_id) REFERENCES Person (id));Musterabgleich
Verwenden Sie die Funktion GRAPH_TABLE mit MATCH, um Muster zu finden. Die Syntax verwendet () für Knoten und [] für Kanten:
FROM GRAPH_TABLE (social_network MATCH (a:Person)-[k:Knows]->(b:Person) COLUMNS (a.name AS person1, b.name AS person2, k.since));| person1 | person2 | since |
|---|---|---|
| Alice | Bob | 2020-01-01 |
| Bob | Charlie | 2021-06-15 |
Pfadsuche
Finden Sie Pfade variabler Länge mit Quantoren wie {1,5} (1 bis 5 Hops) oder + (einer oder mehr):
FROM GRAPH_TABLE (social_network MATCH p = ANY SHORTEST (a:Person)-[k:Knows]->{1,3}(b:Person) WHERE a.name = 'Alice' AND b.name = 'Charlie' COLUMNS (a.name AS start_person, b.name AS end_person, path_length(p) AS hops));| start_person | end_person | hops |
|---|---|---|
| Alice | Charlie | 2 |
Graphalgorithmen
Warning Graphalgorithmus-Funktionen können derzeit aufgrund eines bekannten Problems fehlschlagen und den Fehler
csr_cte does not existzurückgeben.
DuckPGQ enthält eingebaute Graphalgorithmen:
| Funktion | Beschreibung |
|---|---|
pagerank(graph, vertex_label, edge_label) |
Berechnet PageRank-Zentralitätswerte |
local_clustering_coefficient(graph, vertex_label, edge_label) |
Misst, wie stark die Nachbarn eines Knotens untereinander verbunden sind |
weakly_connected_component(graph, vertex_label, edge_label) |
Identifiziert Zusammenhangskomponenten |
Beispiel:
FROM pagerank(social_network, Person, Knows);Anwendungsfall: Erkennung von Finanzbetrug
Graphabfragen eignen sich besonders gut, um verdächtige Muster in Finanzdaten zu finden. Siehe den Blogbeitrag „Uncovering Financial Crime with DuckDB and Graph Queries“ für ein ausführliches Beispiel zur Erkennung von Geldwäsche-Mustern.
Aufräumen
So entfernen Sie einen Property Graph:
DROP PROPERTY GRAPH social_network;