Skip to content

Commit 1a695ab

Browse files
authored
SQL Transtivity Data and Queries
All inclusive script for generating social network relations and performing variety of graph analytics operations.
1 parent 388d682 commit 1a695ab

File tree

1 file changed

+174
-0
lines changed

1 file changed

+174
-0
lines changed

Diff for: sql-transitivity-graph-analytics-foaf.sql

+174
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
-- Table/Relation Creation
2+
3+
DROP TABLE demo.foaf.knows ;
4+
5+
CREATE TABLE demo.foaf.knows (subject VARCHAR, object VARCHAR, PRIMARY KEY (subject, object))
6+
ALTER INDEX foaf_knows_idx ON demo.foaf.knows PARTITION (subject VARCHAR);
7+
CREATE INDEX foaf_knows_idx2 ON demo.foaf.knows (object, subject) PARTITION (object VARCHAR);
8+
9+
-- SPARQL Relation Eequivalents
10+
-- <urn:a> foaf:knows <urn:b> , <urn:c>, <urn:d>, <urn:e>, <urn:f>, <urn:m>, <urn:g> .
11+
INSERT INTO demo.foaf.knows VALUES ('a', 'b');
12+
INSERT INTO demo.foaf.knows VALUES ('a', 'c');
13+
INSERT INTO demo.foaf.knows VALUES ('a', 'd');
14+
INSERT INTO demo.foaf.knows VALUES ('a', 'e');
15+
INSERT INTO demo.foaf.knows VALUES ('a', 'f');
16+
INSERT INTO demo.foaf.knows VALUES ('a', 'm');
17+
INSERT INTO demo.foaf.knows VALUES ('a', 'g');
18+
19+
-- SPARQL Relation Eequivalents
20+
-- <urn:b> foaf:knows <urn:a> , <urn:c> .
21+
INSERT INTO demo.foaf.knows VALUES ('b', 'a');
22+
INSERT INTO demo.foaf.knows VALUES ('b', 'c');
23+
24+
-- SPARQL Relation Eequivalents
25+
-- <urn:c> foaf:knows <urn:a> , <urn:b>, <urn:i>, <urn:l> .
26+
INSERT INTO demo.foaf.knows VALUES ('c', 'a');
27+
INSERT INTO demo.foaf.knows VALUES ('c', 'b');
28+
INSERT INTO demo.foaf.knows VALUES ('c', 'i');
29+
INSERT INTO demo.foaf.knows VALUES ('c', 'l');
30+
31+
-- SPARQL Relation Eequivalents
32+
-- <urn:d> foaf:knows <urn:a> , <urn:k> .
33+
INSERT INTO demo.foaf.knows VALUES ('d', 'a');
34+
INSERT INTO demo.foaf.knows VALUES ('d', 'k');
35+
36+
-- SPARQL Relation Eequivalents
37+
-- <urn:e> foaf:knows <urn:a> , <urn:m> .
38+
INSERT INTO demo.foaf.knows VALUES ('e', 'a');
39+
INSERT INTO demo.foaf.knows VALUES ('e', 'm');
40+
41+
-- SPARQL Relation Eequivalents
42+
-- <urn:f> foaf:knows <urn:a> , <urn:i> .
43+
INSERT INTO demo.foaf.knows VALUES ('f', 'a');
44+
INSERT INTO demo.foaf.knows VALUES ('f', 'i');
45+
46+
-- SPARQL Relation Eequivalents
47+
-- <urn:m> foaf:knows <urn:a> , <urn:e> , <urn:g> .
48+
INSERT INTO demo.foaf.knows VALUES ('m', 'a');
49+
INSERT INTO demo.foaf.knows VALUES ('m', 'e');
50+
INSERT INTO demo.foaf.knows VALUES ('m', 'g');
51+
52+
-- SPARQL Relation Eequivalents
53+
-- <urn:g> foaf:knows <urn:a> , <urn:m> , <urn:k> , <urn:h> , <urn:j> .
54+
INSERT INTO demo.foaf.knows VALUES ('g', 'a');
55+
INSERT INTO demo.foaf.knows VALUES ('g', 'm');
56+
INSERT INTO demo.foaf.knows VALUES ('g', 'k');
57+
INSERT INTO demo.foaf.knows VALUES ('g', 'h');
58+
INSERT INTO demo.foaf.knows VALUES ('g', 'j');
59+
60+
-- SPARQL Relation Eequivalents
61+
-- <urn:i> foaf:knows <urn:c> , <urn:f> .
62+
INSERT INTO demo.foaf.knows VALUES ('i', 'c');
63+
INSERT INTO demo.foaf.knows VALUES ('i', 'f');
64+
65+
-- SPARQL Relation Eequivalents
66+
-- <urn:l> foaf:knows <urn:c> .
67+
INSERT INTO demo.foaf.knows VALUES ('l', 'c');
68+
69+
-- SPARQL Relation Eequivalents
70+
-- <urn:k> foaf:knows <urn:d> , <urn:g> .
71+
INSERT INTO demo.foaf.knows VALUES ('k', 'd');
72+
INSERT INTO demo.foaf.knows VALUES ('k', 'g');
73+
74+
-- SPARQL Relation Eequivalents
75+
-- <urn:h> foaf:knows <urn:g> .
76+
INSERT INTO demo.foaf.knows VALUES ('h', 'g');
77+
78+
-- SPARQL Relation Eequivalents
79+
-- <urn:j> foaf:knows <urn:g> .
80+
INSERT INTO demo.foaf.knows VALUES ('j', 'g');
81+
82+
-- Centrality
83+
SELECT subject, count(*)
84+
FROM demo.foaf.knows
85+
GROUP BY subject ORDER BY 2 DESC ;
86+
87+
-- Degree Centrality
88+
SELECT count(*) AS cnt
89+
FROM (
90+
SELECT TRANSITIVE T_DISTINCT
91+
T_IN (1) T_OUT (2) T_MIN (1)
92+
subject ,
93+
object
94+
FROM demo.foaf.knows
95+
) AS k
96+
WHERE k.subject = 'a' ;
97+
98+
-- Closeness Centrality
99+
SELECT subject, object, sum(step) AS steps
100+
FROM (
101+
SELECT TRANSITIVE T_DISTINCT
102+
T_IN (1) T_OUT (2) T_MIN (1)
103+
subject,
104+
object ,
105+
T_STEP ('step_no') AS step
106+
FROM demo.foaf.knows
107+
) AS k
108+
WHERE k.subject = 'a'
109+
GROUP BY subject, object ;
110+
111+
-- Betweeness Centrality
112+
SELECT A.object AS via, COUNT (1) AS cnt
113+
FROM (
114+
SELECT TRANSITIVE T_DISTINCT T_MIN(1)
115+
T_OUT(2) T_IN(1)
116+
subject,
117+
object,
118+
T_STEP( 'step_no' ) AS dist_to_via
119+
FROM demo.foaf.knows
120+
) AS A
121+
INNER JOIN (
122+
SELECT TRANSITIVE T_DISTINCT T_SHORTEST_ONLY T_MIN(1)
123+
T_OUT(2) T_IN(1)
124+
subject,
125+
object,
126+
T_STEP( 'step_no' ) AS dist_from_via
127+
FROM demo.foaf.knows
128+
) AS B
129+
ON (A.object = B.subject)
130+
WHERE A.subject = 'a'
131+
GROUP BY A.object
132+
ORDER BY 2 DESC ;
133+
134+
-- Betweeness Centrality using Shortest Path
135+
SELECT A.subject, A.dist_to_via, A.object AS via, B.object
136+
FROM (
137+
SELECT TRANSITIVE T_DISTINCT T_MIN(1)
138+
T_OUT(2) T_IN(1)
139+
subject,
140+
object,
141+
T_STEP( 'step_no' ) AS dist_to_via
142+
FROM demo.foaf.knows
143+
) AS A
144+
INNER JOIN (
145+
SELECT TRANSITIVE T_DISTINCT T_SHORTEST_ONLY T_MIN(1)
146+
T_OUT(2) T_IN(1)
147+
subject,
148+
object,
149+
T_STEP( 'step_no' ) AS dist_from_via
150+
FROM demo.foaf.knows
151+
) AS B
152+
ON (A.object = B.subject)
153+
WHERE A.subject = 'a'
154+
AND B.object <> 'a'
155+
-- GROUP BY A.subject, A.dist_to_via, A.object, B.object
156+
ORDER BY 3 DESC ;
157+
158+
-- Betweeness Centrality without Shortest Path
159+
SELECT subject, object, step AS steps, path
160+
FROM (
161+
SELECT TRANSITIVE T_DISTINCT
162+
T_IN (1) T_OUT (2) T_MIN (1)
163+
subject,
164+
object ,
165+
T_STEP ('step_no') AS step,
166+
T_STEP ('path_id') AS path
167+
FROM demo.foaf.knows
168+
) AS k
169+
WHERE k.subject = 'c' AND k.object = 'j'
170+
-- GROUP BY subject, object ;
171+
ORDER BY steps DESC ;
172+
173+
174+

0 commit comments

Comments
 (0)