@@ -19,242 +19,107 @@ WITH ecommerce_data AS (
1919 CAST(JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64) / 1024 AS total_kb,
2020
2121 -- Operational emissions calculations
22- (
23- CAST(
24- JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64
25- ) / 1024 / 1024 / 1024
26- ) * operational_emissions_data_centers *
27- grid_intensity AS op_emissions_dc,
28- (
29- CAST(
30- JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64
31- ) / 1024 / 1024 / 1024
32- ) * operational_emissions_network *
33- grid_intensity AS op_emissions_networks,
34- (
35- CAST(
36- JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64
37- ) / 1024 / 1024 / 1024
38- ) * operational_emissions_user_devices *
39- grid_intensity AS op_emissions_devices,
22+ (CAST(JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64) / 1024 / 1024 / 1024 ) * operational_emissions_data_centers * grid_intensity AS op_emissions_dc,
23+ (CAST(JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64) / 1024 / 1024 / 1024 ) * operational_emissions_network * grid_intensity AS op_emissions_networks,
24+ (CAST(JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64) / 1024 / 1024 / 1024 ) * operational_emissions_user_devices * grid_intensity AS op_emissions_devices,
4025
4126 -- Embodied emissions calculations
42- (
43- CAST(
44- JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64
45- ) / 1024 / 1024 / 1024
46- ) * embodied_emissions_data_centers *
47- grid_intensity AS em_emissions_dc,
48- (
49- CAST(
50- JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64
51- ) / 1024 / 1024 / 1024
52- ) * embodied_emissions_network *
53- grid_intensity AS em_emissions_networks,
54- (
55- CAST(
56- JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64
57- ) / 1024 / 1024 / 1024
58- ) * embodied_emissions_user_devices *
59- grid_intensity AS em_emissions_devices,
27+ (CAST(JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64) / 1024 / 1024 / 1024 ) * embodied_emissions_data_centers * grid_intensity AS em_emissions_dc,
28+ (CAST(JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64) / 1024 / 1024 / 1024 ) * embodied_emissions_network * grid_intensity AS em_emissions_networks,
29+ (CAST(JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64) / 1024 / 1024 / 1024 ) * embodied_emissions_user_devices * grid_intensity AS em_emissions_devices,
6030
6131 -- Total emissions (operational + embodied)
6232 (
63- (
64- CAST(
65- JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64
66- ) / 1024 / 1024 / 1024
67- ) * operational_emissions_data_centers * grid_intensity +
68- (
69- CAST(
70- JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64
71- ) / 1024 / 1024 / 1024
72- ) * operational_emissions_network * grid_intensity +
73- (
74- CAST(
75- JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64
76- ) / 1024 / 1024 / 1024
77- ) * operational_emissions_user_devices * grid_intensity
33+ (CAST(JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64) / 1024 / 1024 / 1024 ) * operational_emissions_data_centers * grid_intensity +
34+ (CAST(JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64) / 1024 / 1024 / 1024 ) * operational_emissions_network * grid_intensity +
35+ (CAST(JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64) / 1024 / 1024 / 1024 ) * operational_emissions_user_devices * grid_intensity
7836 ) AS total_operational_emissions,
7937
8038 (
81- (
82- CAST(
83- JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64
84- ) / 1024 / 1024 / 1024
85- ) * embodied_emissions_data_centers * grid_intensity +
86- (
87- CAST(
88- JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64
89- ) / 1024 / 1024 / 1024
90- ) * embodied_emissions_network * grid_intensity +
91- (
92- CAST(
93- JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64
94- ) / 1024 / 1024 / 1024
95- ) * embodied_emissions_user_devices * grid_intensity
39+ (CAST(JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64) / 1024 / 1024 / 1024 ) * embodied_emissions_data_centers * grid_intensity +
40+ (CAST(JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64) / 1024 / 1024 / 1024 ) * embodied_emissions_network * grid_intensity +
41+ (CAST(JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64) / 1024 / 1024 / 1024 ) * embodied_emissions_user_devices * grid_intensity
9642 ) AS total_embodied_emissions,
9743
9844 (
99- (
100- CAST(
101- JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64
102- ) / 1024 / 1024 / 1024
103- ) * operational_emissions_data_centers * grid_intensity +
104- (
105- CAST(
106- JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64
107- ) / 1024 / 1024 / 1024
108- ) * operational_emissions_network * grid_intensity +
109- (
110- CAST(
111- JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64
112- ) / 1024 / 1024 / 1024
113- ) * operational_emissions_user_devices * grid_intensity +
114- (
115- CAST(
116- JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64
117- ) / 1024 / 1024 / 1024
118- ) * embodied_emissions_data_centers * grid_intensity +
119- (
120- CAST(
121- JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64
122- ) / 1024 / 1024 / 1024
123- ) * embodied_emissions_network * grid_intensity +
124- (
125- CAST(
126- JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64
127- ) / 1024 / 1024 / 1024
128- ) * embodied_emissions_user_devices * grid_intensity
45+ (CAST(JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64) / 1024 / 1024 / 1024 ) * operational_emissions_data_centers * grid_intensity +
46+ (CAST(JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64) / 1024 / 1024 / 1024 ) * operational_emissions_network * grid_intensity +
47+ (CAST(JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64) / 1024 / 1024 / 1024 ) * operational_emissions_user_devices * grid_intensity +
48+ (CAST(JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64) / 1024 / 1024 / 1024 ) * embodied_emissions_data_centers * grid_intensity +
49+ (CAST(JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64) / 1024 / 1024 / 1024 ) * embodied_emissions_network * grid_intensity +
50+ (CAST(JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64) / 1024 / 1024 / 1024 ) * embodied_emissions_user_devices * grid_intensity
12951 ) AS total_emissions,
13052
13153 -- Proportions of each resource type relative to total bytes
132- CAST(
133- JSON_VALUE(summary, ' $.bytesHtml' ) AS INT64
134- ) / CAST(
135- JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64
136- ) AS html_proportion,
137- CAST(
138- JSON_VALUE(summary, ' $.bytesJS' ) AS INT64
139- ) / CAST(JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64) AS js_proportion,
140- CAST(
141- JSON_VALUE(summary, ' $.bytesCss' ) AS INT64
142- ) / CAST(
143- JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64
144- ) AS css_proportion,
145- CAST(
146- JSON_VALUE(summary, ' $.bytesImg' ) AS INT64
147- ) / CAST(
148- JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64
149- ) AS img_proportion,
150- CAST(
151- JSON_VALUE(summary, ' $.bytesFont' ) AS INT64
152- ) / CAST(
153- JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64
154- ) AS font_proportion,
54+ CAST(JSON_VALUE(summary, ' $.bytesHtml' ) AS INT64) / CAST(JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64) AS html_proportion,
55+ CAST(JSON_VALUE(summary, ' $.bytesJS' ) AS INT64) / CAST(JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64) AS js_proportion,
56+ CAST(JSON_VALUE(summary, ' $.bytesCss' ) AS INT64) / CAST(JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64) AS css_proportion,
57+ CAST(JSON_VALUE(summary, ' $.bytesImg' ) AS INT64) / CAST(JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64) AS img_proportion,
58+ CAST(JSON_VALUE(summary, ' $.bytesFont' ) AS INT64) / CAST(JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64) AS font_proportion,
15559
15660 -- Resource-specific emissions calculations
157- (
158- SAFE_DIVIDE(
159- CAST(JSON_VALUE(summary, ' $.bytesHtml' ) AS INT64),
160- CAST(JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64)
161- ) * (
162- (
163- CAST(
164- JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64
165- ) / 1024 / 1024 / 1024
166- ) * (
167- operational_emissions_data_centers * grid_intensity +
168- operational_emissions_network * grid_intensity +
169- operational_emissions_user_devices * grid_intensity +
170- embodied_emissions_data_centers * grid_intensity +
171- embodied_emissions_network * grid_intensity +
172- embodied_emissions_user_devices * grid_intensity
173- )
174- )) AS total_html_emissions,
175-
176- (
177- SAFE_DIVIDE(
178- CAST(JSON_VALUE(summary, ' $.bytesJS' ) AS INT64),
179- CAST(JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64)
180- ) * (
181- (
182- CAST(
183- JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64
184- ) / 1024 / 1024 / 1024
185- ) * (
186- operational_emissions_data_centers * grid_intensity +
187- operational_emissions_network * grid_intensity +
188- operational_emissions_user_devices * grid_intensity +
189- embodied_emissions_data_centers * grid_intensity +
190- embodied_emissions_network * grid_intensity +
191- embodied_emissions_user_devices * grid_intensity
192- )
193- )) AS total_js_emissions,
194-
195- (
196- SAFE_DIVIDE(
197- CAST(JSON_VALUE(summary, ' $.bytesCss' ) AS INT64),
198- CAST(JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64)
199- ) * (
200- (
201- CAST(
202- JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64
203- ) / 1024 / 1024 / 1024
204- ) * (
205- operational_emissions_data_centers * grid_intensity +
206- operational_emissions_network * grid_intensity +
207- operational_emissions_user_devices * grid_intensity +
208- embodied_emissions_data_centers * grid_intensity +
209- embodied_emissions_network * grid_intensity +
210- embodied_emissions_user_devices * grid_intensity
211- )
212- )) AS total_css_emissions,
213-
214- (
215- SAFE_DIVIDE(
216- CAST(JSON_VALUE(summary, ' $.bytesImg' ) AS INT64),
217- CAST(JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64)
218- ) * (
219- (
220- CAST(
221- JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64
222- ) / 1024 / 1024 / 1024
223- ) * (
224- operational_emissions_data_centers * grid_intensity +
225- operational_emissions_network * grid_intensity +
226- operational_emissions_user_devices * grid_intensity +
227- embodied_emissions_data_centers * grid_intensity +
228- embodied_emissions_network * grid_intensity +
229- embodied_emissions_user_devices * grid_intensity
230- )
231- )) AS total_img_emissions,
232-
233- (
234- SAFE_DIVIDE(
235- CAST(JSON_VALUE(summary, ' $.bytesFont' ) AS INT64),
236- CAST(JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64)
237- ) * (
238- (
239- CAST(
240- JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64
241- ) / 1024 / 1024 / 1024
242- ) * (
243- operational_emissions_data_centers * grid_intensity +
244- operational_emissions_network * grid_intensity +
245- operational_emissions_user_devices * grid_intensity +
246- embodied_emissions_data_centers * grid_intensity +
247- embodied_emissions_network * grid_intensity +
248- embodied_emissions_user_devices * grid_intensity
249- )
250- )) AS total_font_emissions,
61+ (SAFE_DIVIDE(CAST(JSON_VALUE(summary, ' $.bytesHtml' ) AS INT64), CAST(JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64)) * (
62+ (CAST(JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64) / 1024 / 1024 / 1024 ) * (
63+ operational_emissions_data_centers * grid_intensity +
64+ operational_emissions_network * grid_intensity +
65+ operational_emissions_user_devices * grid_intensity +
66+ embodied_emissions_data_centers * grid_intensity +
67+ embodied_emissions_network * grid_intensity +
68+ embodied_emissions_user_devices * grid_intensity
69+ )
70+ )) AS total_html_emissions,
71+
72+ (SAFE_DIVIDE(CAST(JSON_VALUE(summary, ' $.bytesJS' ) AS INT64), CAST(JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64)) * (
73+ (CAST(JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64) / 1024 / 1024 / 1024 ) * (
74+ operational_emissions_data_centers * grid_intensity +
75+ operational_emissions_network * grid_intensity +
76+ operational_emissions_user_devices * grid_intensity +
77+ embodied_emissions_data_centers * grid_intensity +
78+ embodied_emissions_network * grid_intensity +
79+ embodied_emissions_user_devices * grid_intensity
80+ )
81+ )) AS total_js_emissions,
82+
83+ (SAFE_DIVIDE(CAST(JSON_VALUE(summary, ' $.bytesCss' ) AS INT64), CAST(JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64)) * (
84+ (CAST(JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64) / 1024 / 1024 / 1024 ) * (
85+ operational_emissions_data_centers * grid_intensity +
86+ operational_emissions_network * grid_intensity +
87+ operational_emissions_user_devices * grid_intensity +
88+ embodied_emissions_data_centers * grid_intensity +
89+ embodied_emissions_network * grid_intensity +
90+ embodied_emissions_user_devices * grid_intensity
91+ )
92+ )) AS total_css_emissions,
93+
94+ (SAFE_DIVIDE(CAST(JSON_VALUE(summary, ' $.bytesImg' ) AS INT64), CAST(JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64)) * (
95+ (CAST(JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64) / 1024 / 1024 / 1024 ) * (
96+ operational_emissions_data_centers * grid_intensity +
97+ operational_emissions_network * grid_intensity +
98+ operational_emissions_user_devices * grid_intensity +
99+ embodied_emissions_data_centers * grid_intensity +
100+ embodied_emissions_network * grid_intensity +
101+ embodied_emissions_user_devices * grid_intensity
102+ )
103+ )) AS total_img_emissions,
104+
105+ (SAFE_DIVIDE(CAST(JSON_VALUE(summary, ' $.bytesFont' ) AS INT64), CAST(JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64)) * (
106+ (CAST(JSON_VALUE(summary, ' $.bytesTotal' ) AS INT64) / 1024 / 1024 / 1024 ) * (
107+ operational_emissions_data_centers * grid_intensity +
108+ operational_emissions_network * grid_intensity +
109+ operational_emissions_user_devices * grid_intensity +
110+ embodied_emissions_data_centers * grid_intensity +
111+ embodied_emissions_network * grid_intensity +
112+ embodied_emissions_user_devices * grid_intensity
113+ )
114+ )) AS total_font_emissions,
251115
252116 -- Resource-specific size in KB
253117 CAST(JSON_VALUE(summary, ' $.bytesHtml' ) AS INT64) / 1024 AS html_kb,
254118 CAST(JSON_VALUE(summary, ' $.bytesJS' ) AS INT64) / 1024 AS js_kb,
255119 CAST(JSON_VALUE(summary, ' $.bytesCss' ) AS INT64) / 1024 AS css_kb,
256120 CAST(JSON_VALUE(summary, ' $.bytesImg' ) AS INT64) / 1024 AS img_kb,
257121 CAST(JSON_VALUE(summary, ' $.bytesFont' ) AS INT64) / 1024 AS font_kb
122+
258123 FROM
259124 ` httparchive.crawl.pages` ,
260125 UNNEST(technologies) AS tech
@@ -265,9 +130,7 @@ WITH ecommerce_data AS (
265130 SELECT 1
266131 FROM UNNEST(tech .categories ) AS category
267132 WHERE category = ' Ecommerce' AND
268- tech .technology NOT IN (
269- ' Cart Functionality' , ' Google Analytics Enhanced eCommerce'
270- )
133+ tech .technology NOT IN (' Cart Functionality' , ' Google Analytics Enhanced eCommerce' )
271134 )
272135)
273136
@@ -277,44 +140,28 @@ SELECT
277140 COUNT (0 ) AS pages,
278141
279142 -- Median resource weights and emissions
280- APPROX_QUANTILES(total_kb, 1000 ) [OFFSET(500 )] AS median_total_kb,
281- APPROX_QUANTILES(
282- total_operational_emissions, 1000
283- ) [OFFSET(500 )] AS median_operational_emissions,
284- APPROX_QUANTILES(
285- total_embodied_emissions, 1000
286- ) [OFFSET(500 )] AS median_embodied_emissions,
287- APPROX_QUANTILES(
288- total_emissions, 1000
289- ) [OFFSET(500 )] AS median_total_emissions,
143+ APPROX_QUANTILES(total_kb, 1000 )[OFFSET(500 )] AS median_total_kb,
144+ APPROX_QUANTILES(total_operational_emissions, 1000 )[OFFSET(500 )] AS median_operational_emissions,
145+ APPROX_QUANTILES(total_embodied_emissions, 1000 )[OFFSET(500 )] AS median_embodied_emissions,
146+ APPROX_QUANTILES(total_emissions, 1000 )[OFFSET(500 )] AS median_total_emissions,
290147
291148 -- Resource-specific medians
292- APPROX_QUANTILES(html_kb, 1000 ) [OFFSET(500 )] AS median_html_kb,
293- APPROX_QUANTILES(
294- total_html_emissions, 1000
295- ) [OFFSET(500 )] AS median_total_html_emissions,
296- APPROX_QUANTILES(js_kb, 1000 ) [OFFSET(500 )] AS median_js_kb,
297- APPROX_QUANTILES(
298- total_js_emissions, 1000
299- ) [OFFSET(500 )] AS median_total_js_emissions,
300- APPROX_QUANTILES(css_kb, 1000 ) [OFFSET(500 )] AS median_css_kb,
301- APPROX_QUANTILES(
302- total_css_emissions, 1000
303- ) [OFFSET(500 )] AS median_total_css_emissions,
304- APPROX_QUANTILES(img_kb, 1000 ) [OFFSET(500 )] AS median_img_kb,
305- APPROX_QUANTILES(
306- total_img_emissions, 1000
307- ) [OFFSET(500 )] AS median_total_img_emissions,
308- APPROX_QUANTILES(font_kb, 1000 ) [OFFSET(500 )] AS median_font_kb,
309- APPROX_QUANTILES(
310- total_font_emissions, 1000
311- ) [OFFSET(500 )] AS median_total_font_emissions
149+ APPROX_QUANTILES(html_kb, 1000 )[OFFSET(500 )] AS median_html_kb,
150+ APPROX_QUANTILES(total_html_emissions, 1000 )[OFFSET(500 )] AS median_total_html_emissions,
151+ APPROX_QUANTILES(js_kb, 1000 )[OFFSET(500 )] AS median_js_kb,
152+ APPROX_QUANTILES(total_js_emissions, 1000 )[OFFSET(500 )] AS median_total_js_emissions,
153+ APPROX_QUANTILES(css_kb, 1000 )[OFFSET(500 )] AS median_css_kb,
154+ APPROX_QUANTILES(total_css_emissions, 1000 )[OFFSET(500 )] AS median_total_css_emissions,
155+ APPROX_QUANTILES(img_kb, 1000 )[OFFSET(500 )] AS median_img_kb,
156+ APPROX_QUANTILES(total_img_emissions, 1000 )[OFFSET(500 )] AS median_total_img_emissions,
157+ APPROX_QUANTILES(font_kb, 1000 )[OFFSET(500 )] AS median_font_kb,
158+ APPROX_QUANTILES(total_font_emissions, 1000 )[OFFSET(500 )] AS median_total_font_emissions
312159FROM
313160 ecommerce_data
314161GROUP BY
315162 client,
316163 ecommerce
317164ORDER BY
318165 pages DESC ,
319- ecommerce ASC ,
320- client ASC ;
166+ ecommerce,
167+ client;
0 commit comments