Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
1
Microsoft SQL Graph Database
Salvatore Pellitteri Microsoft SQL Graph Database
2
Salvatore Pellitteri | @pellittsa
Developer Team Manager in Microsys Srl. Microsoft MVP Azure – Application Integration Microsoft P-Seller competenza Data Platform SQL / BI / Integration Architect
3
Organizers GetLatestVersion.it
4
Sponsors
5
Introduzione «Con il rilascio di SQL Server 2017, Microsoft ha aggiunto il supporto per i graph database per gestire più semplicemente dati che contengono relazioni di entità complesse, pensiamo ai social media per esempio, in cui è possibile avere molteplici relazioni molti-a-molti che cambiano frequentemente»
6
Agenda Perchè e quando usare Graph Database
Costruire il modello e l’architettura Come interrogare e modificare i dati Le gerarchie Considerazioni Visualizzazione (PowerBI & R Server)
7
perchè graph database
8
Perchè Graph Database references SQL Server Articles references
SQL Server Components & Features writes likes Developers & Administrators likes likes
9
Perchè Graph Database Analisi di dati altamente interconnessi
references SQL Server Articles references Analisi di dati altamente interconnessi Relazioni molti-a-molti complesse e in continua evoluzione Dati gerarchici (HierarchyID) SQL Server Components & Features writes likes Developers & Administrators likes likes
10
Terminologia Nodo - Vertice Node A Arco – Lato - Spigolo Edge
11
il modello e l’architettura
12
Costruire il modello nodes edges Articles Dev & Adm Components
D&A write articles Articles reference components Articles reference articles D&A like articles D&A like components D&A like D&A A
13
Costruire il modello Tabelle “Node” Tabelle “Edge” Una per ogni entità
Una per ogni relazione Una per tutte le relazioni Una per gruppi/tipologie di relazioni
14
Costruire il modello Tabelle “Node” & “Edge” sono user-defined table:
Non è necessario costruire database a parte o “speciali” Le tabelle Node devono contenere almeno una proprietà (ovvio) Le tabelle Edge possono contenere proprietà
15
Node Table CREATE TABLE Components (
ComponentID INT IDENTITY PRIMARY KEY, ComponentName NVARCHAR(100) NOT NULL, ComponentDescription NVARCHAR(100) NOT NULL ) AS NODE;
16
Node Table Viste sys.tables e sys.columns modificate
Colonna $node_id: identifica univocamente un determinato nodo nel database I valori in $node_id vengono generati automaticamente (object_id + valore bigint generato)
17
Node Table Quando viene selezionata la colonna $node_id, viene visualizzato un valore calcolato sotto forma di stringa JSON.
18
Edge Table CREATE TABLE Write AS EDGE; CREATE TABLE Reference AS EDGE;
CREATE TABLE Likes ( score int ) AS EDGE;
19
Edge Table Viste sys.tables e sys.columns modificate
Colonna $edge_id: identifica univocamente una istanza edge nel database I valori in $edge_id vengono generati automaticamente (object_id + valore bigint generato)
20
Edge Table Quando viene selezionata la colonna $edge_id, viene visualizzato un valore calcolato sotto forma di stringa JSON. $from_id contiene il $node_id sorgente $to_id contiene il $node_id di destinazione
21
Node & Edge table
22
Demo Creazione Modello
23
interrogare e modificare
24
Query graph db SELECT DevAdmins.Nickname, Components.ComponentName,
Components.ComponentDescription FROM DevAdmins INNER JOIN Likes ON DevAdmins.$node_id = Likes.$from_id INNER JOIN Components ON Likes.$to_id = Components.$node_id;
25
Query graph db – MATCH function
E’ stata aggiunta specificatamente per interrogare le graph table E’ possible usarla solo nelle WHERE di una SELECT che interroga NODE e EDGE table E’ possibile combinarla con altre clausole di WHERE ma solo in AND, OR e NOT non sono disponibili.
26
Query graph db – MATCH function
SELECT DevAdmins.Nickname, Components.ComponentName, Components.ComponentDescription FROM DevAdmins INNER JOIN Likes ON DevAdmins.$node_id = Likes.$from_id INNER JOIN Components ON Likes.$to_id = Components.$node_id; SELECT DevAdmins.Nickname, Components.ComponentName, Components.ComponentDescription FROM DevAdmins, Likes, Components WHERE MATCH(DevAdmins-(Likes)->Components);
27
Query graph db – MATCH function
SELECT DevAdmins.Nickname, Components.ComponentName, Components.ComponentDescription FROM DevAdmins, Likes, Components WHERE MATCH(DevAdmins-(Likes)->Components) AND Likes.score > 3;
28
Query graph db – MATCH function
SELECT DevAdmins.Nickname, Articles.Title, Components.ComponentDescription FROM DevAdmins, Write, Articles, Reference, Components WHERE MATCH(DevAdmins-(Write)->Articles-(Reference)->Components);
29
Query graph db – MATCH function
SELECT DevAdmins.Nickname, Articles.Title, DevAdminsLike.Nickname FROM DevAdmins, Write, Articles, Likes, DevAdmins DevAdminsLike WHERE MATCH(DevAdmins-(Write)->Articles<-(Likes)-DevAdminsLike);
30
Altre funzioni Node table functions Edge table functions
OBJECT_ID_FROM_NODE_ID($node_id) GRAPH_ID_FROM_NODE_ID($node_id) NODE_ID_FROM_PARTS(object_id, graph_id) Edge table functions OBJECT_ID_FROM_EDGE_ID($edge_id) GRAPH_ID_FROM_EDGE_ID($edge_id) EDGE_ID_FROM_PARTS(object_id, graph_id)
31
Delete & Update DELETE Likes FROM DevAdmins, Likes, Components WHERE
MATCH(DevAdmins-(Likes)->Components) AND ComponentID = 3; DELETE Likes WHERE $edge_id = '{"type":"edge","schema":"dbo","table":"Likes","id":8}';
32
Insert & Delete No constraint / No cascade (SQL 2017)
Gestione manuale dell’integrità dei dati Creazione di trigger
33
Best practice SQL non crea indici unique SQL non crea constraint
Dobbiamo creare noi indici unique sia nelle node che nelle edge table per evitare duplicati (best practice) Non ci sono constraint nelle edge che limitano la tipologia di tabelle node sorgenti o destinazioni quindi
34
Demo Interrogare il modello
35
le gerarchie
36
Gerarchie A.D. Dir. Amministrativo Marco Sara Dir. Commerciale Giovanni Bruno Dir. Produzione Michela Luca Dir. IT BI Specialist System Eng. ? Es: BI Specialist fa parte della Direzione IT ma lavora per una persona della Direzione commerciale
37
Gerarchie CREATE TABLE Employees (
EmployeeID INT IDENTITY PRIMARY KEY, FirstName NVARCHAR(50) NOT NULL, LastName NVARCHAR(50) NOT NULL ) AS NODE; CREATE TABLE ReportsTo AS EDGE; CREATE TABLE WorkFor Percent INT NULL ) AS EDGE; Report To Employees Work For
38
considerazioni
39
Limitazioni Table type Table variable Tabelle temporanee
Tabelle in-memory Temporal table Cross database query
40
SQL Server 2019 Edge constraint MATCH in MERGE DML
41
Cosa manca UNION (ma...) LOOP
Polymorphism (ricerca ricorsiva su tutti i nodi e archi) LOOP Transitive closure (ricerca ricorsiva per specifici nodi, archi e profondità) LOOP & Temp Table Shortest path LOOP & TempTable Page rank
42
Visualization
43
PowerBI Visualization
44
PowerBI Visualization
Non è possible accedere direttamente alle tabelle Vanno sviluppate delle viste
45
R Integration
46
R Integration Installo Machine Learning Services
Eseguo la sp_configure 'external scripts enabled’, 1 Download Download RunAs admin "C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\R_SERVICES\bin\R.exe" install.packages("C:\\Users\\salvatore\\OneDrive\\Work\\Events\\ SQL Saturday\\R Integration\\igraph_1.0.1.zip") install.packages("C:\\Users\\salvatore\\OneDrive\\Work\\Events\\ SQL Saturday\\R Integration\\magrittr_1.5.zip")
47
R Integration
48
Demo Visualization
49
Thanks!
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.