-
Notifications
You must be signed in to change notification settings - Fork 20
Expand file tree
/
Copy path2019_subclassof_tree.sql
More file actions
37 lines (31 loc) · 1.12 KB
/
2019_subclassof_tree.sql
File metadata and controls
37 lines (31 loc) · 1.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
CREATE OR REPLACE TABLE `wikidata.subclasses_2019`
AS
SELECT a.*, b.en_label subclass_of_label, 1 level
FROM (
SELECT a.numeric_id, en_label, b.numeric_id subclass_of_numeric_id
FROM `fh-bigquery.wikidata.wikidata_2019` a, UNNEST(a.subclass_of) b
WHERE a.type = 'item'
) a
JOIN `fh-bigquery.wikidata.wikidata_2019` b
ON a.subclass_of_numeric_id = b.numeric_id AND b.type = 'item'
;
LOOP
BEGIN
DECLARE row_count INT64;
DECLARE row_diff INT64;
SET row_count = (SELECT COUNT(*) FROM `wikidata.subclasses_2019`)
;
INSERT INTO `wikidata.subclasses_2019`
SELECT a.numeric_id, a.en_label, b.subclass_of_numeric_id, b.subclass_of_label, MIN(a.level + b.level) level
FROM `wikidata.subclasses_2019` a
JOIN `wikidata.subclasses_2019` b
ON a.subclass_of_numeric_id = b.numeric_id
WHERE STRUCT(a.numeric_id,b.subclass_of_numeric_id) NOT IN (SELECT STRUCT(numeric_id,subclass_of_numeric_id) FROM `wikidata.subclasses_2019`)
GROUP BY 1,2,3,4
;
SET row_diff = (SELECT COUNT(*) FROM `wikidata.subclasses_2019`) - row_count;
IF row_diff = 0 THEN
LEAVE;
END IF;
END;
END LOOP;