-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathcreateTableMatches.sql
More file actions
216 lines (193 loc) · 5.26 KB
/
Copy pathcreateTableMatches.sql
File metadata and controls
216 lines (193 loc) · 5.26 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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
-- Create the table of recent matches using the data available through the API,
-- after Python script gets around the 1000 match-request restriction.
-- Richard Kelson
-- June 2021
USE AOE2
DROP TABLE IF EXISTS #matches0, #matches1, #matches2, #matches3, #matches4, #matches5
Declare @JSON0 varchar(max)
SELECT @JSON0 = BulkColumn
FROM OPENROWSET (BULK 'C:\Users\richa\Documents\AOE2 API Storage\matches0.JSON', SINGLE_CLOB) as j
SELECT *
INTO #matches0
FROM OPENJSON (@JSON0)
WITH(match_id varchar(256),
--lobby_id varchar(256),
match_uuid varchar(256),
version int,
name varchar(128),
num_players int '$.num_players',
leaderboard_id int,
players nvarchar(max) as JSON) as CivPerformance
CROSS APPLY OPENJSON (players) WITH (
profile_id int,
rating float,
team int,
civ int,
won bit)
-- Similarly for other .json files
Declare @JSON1 varchar(max)
SELECT @JSON1 = BulkColumn
FROM OPENROWSET (BULK 'C:\Users\richa\Documents\AOE2 API Storage\matches1.JSON', SINGLE_CLOB) as j
SELECT *
INTO #matches1
FROM OPENJSON (@JSON1)
WITH(match_id varchar(256),
--lobby_id varchar(256),
match_uuid varchar(256),
version int,
name varchar(128),
num_players int '$.num_players',
leaderboard_id int,
players nvarchar(max) as JSON) as CivPerformance
CROSS APPLY OPENJSON (players) WITH (
profile_id int,
rating float,
team int,
civ int,
won bit)
Declare @JSON2 varchar(max)
SELECT @JSON2 = BulkColumn
FROM OPENROWSET (BULK 'C:\Users\richa\Documents\AOE2 API Storage\matches2.JSON', SINGLE_CLOB) as j
SELECT *
INTO #matches2
FROM OPENJSON (@JSON2)
WITH(match_id varchar(256),
--lobby_id varchar(256),
match_uuid varchar(256),
version int,
name varchar(128),
num_players int '$.num_players',
leaderboard_id int,
players nvarchar(max) as JSON) as CivPerformance
CROSS APPLY OPENJSON (players) WITH (
profile_id int,
rating float,
team int,
civ int,
won bit)
Declare @JSON3 varchar(max)
SELECT @JSON3 = BulkColumn
FROM OPENROWSET (BULK 'C:\Users\richa\Documents\AOE2 API Storage\matches3.JSON', SINGLE_CLOB) as j
SELECT *
INTO #matches3
FROM OPENJSON (@JSON3)
WITH(match_id varchar(256),
--lobby_id varchar(256),
match_uuid varchar(256),
version int,
name varchar(128),
num_players int '$.num_players',
leaderboard_id int,
players nvarchar(max) as JSON) as CivPerformance
CROSS APPLY OPENJSON (players) WITH (
profile_id int,
rating float,
team int,
civ int,
won bit)
Declare @JSON4 varchar(max)
SELECT @JSON4 = BulkColumn
FROM OPENROWSET (BULK 'C:\Users\richa\Documents\AOE2 API Storage\matches4.JSON', SINGLE_CLOB) as j
SELECT *
INTO #matches4
FROM OPENJSON (@JSON4)
WITH(match_id varchar(256),
--lobby_id varchar(256),
match_uuid varchar(256),
version int,
name varchar(128),
num_players int '$.num_players',
leaderboard_id int,
players nvarchar(max) as JSON) as CivPerformance
CROSS APPLY OPENJSON (players) WITH (
profile_id int,
rating float,
team int,
civ int,
won bit)
Declare @JSON5 varchar(max)
SELECT @JSON5 = BulkColumn
FROM OPENROWSET (BULK 'C:\Users\richa\Documents\AOE2 API Storage\matches5.JSON', SINGLE_CLOB) as j
SELECT *
INTO #matches5
FROM OPENJSON (@JSON5)
WITH(match_id varchar(256),
--lobby_id varchar(256),
match_uuid varchar(256),
version int,
name varchar(128),
num_players int '$.num_players',
leaderboard_id int,
players nvarchar(max) as JSON) as CivPerformance
CROSS APPLY OPENJSON (players) WITH (
profile_id int,
rating float,
team int,
civ int,
won bit)
-- stitch together as union, only keeping the 1v1 Random Map leaderboard
DROP TABLE IF EXISTS matches
SELECT *
INTO matches
FROM (
SELECT * FROM #matches0 WHERE leaderboard_id = 3
UNION ALL
SELECT * FROM #matches1 WHERE leaderboard_id = 3
UNION ALL
SELECT * FROM #matches2 WHERE leaderboard_id = 3
UNION ALL
SELECT * FROM #matches3 WHERE leaderboard_id = 3
UNION ALL
SELECT * FROM #matches4 WHERE leaderboard_id = 3
UNION ALL
SELECT * FROM #matches5 WHERE leaderboard_id = 3
) AS tmp
ALTER TABLE matches ALTER COLUMN won FLOAT -- convert to integer to enable percentage calculations
---------------------------------------------------------------------------------------------------
-- Create table of civs
DROP TABLE IF EXISTS civs
CREATE TABLE civs (
id INT IDENTITY(1,1),
name varchar(128)
)
-- Use regex expression to replace from pasted text (from aoe2de program files folder)
--find: [0-9]{5} "([a-z]*)-utf8.txt"
--replace: \t('$1'),
--e.g. to turn 20411 "aztecs-utf8.txt" --> '(aztecs'),
INSERT INTO civs (name) VALUES ('Aztecs'),
('Berbers'),
('British'),
('Bulgarians'),
('Burgundians'),
('Burmese'),
('Byzantines'),
('Celts'),
('Chinese'),
('Cumans'),
('Ethiopians'),
('Franks'),
('Goths'),
('Huns'),
('Incas'),
('Indians'),
('Italians'),
('Japanese'),
('Khmer'),
('Koreans'),
('Lithuanians'),
('Magyars'),
('Malay'),
('Malians'),
('Mayans'),
('Mongols'),
('Persians'),
('Portuguese'),
('Saracens'),
('Sicilians'),
('Slavs'),
('Spanish'),
('Tatars'),
('Teutons'),
('Turks'),
('Vietnamese'),
('Vikings')