gpt4 book ai didi

sql - 如何使用 BigQuery 获取任何城市的历史天气?

转载 作者:行者123 更新时间:2023-12-04 01:53:58 25 4
gpt4 key购买 nike

BigQuery 将 NOAA 的 gsod 数据加载为公共(public)数据集 - 从 1929 年开始:https://www.reddit.com/r/bigquery/comments/2ts9wo/noaa_gsod_weather_data_loaded_into_bigquery/

如何检索任何城市的历史数据?

最佳答案

2019 年更新:为方便起见

SELECT * 
FROM `fh-bigquery.weather_gsod.all`
WHERE name='SAN FRANCISCO INTERNATIONAL A'
ORDER BY date DESC

每天更新 - 如果没有,请在此处报告

例如,要获得自 1980 年以来旧金山车站 HitTest 的日子:
SELECT name, state, ARRAY_AGG(STRUCT(date,temp) ORDER BY temp DESC LIMIT 5) top_hot, MAX(date) active_until
FROM `fh-bigquery.weather_gsod.all`
WHERE name LIKE 'SAN FRANC%'
AND date > '1980-01-01'
GROUP BY 1,2
ORDER BY active_until DESC

enter image description here

请注意,由于有一个聚簇表,这个查询只处理了 28MB。

和类似的,但不使用站名,我将使用位置和按位置聚集的表:
WITH city AS (SELECT ST_GEOGPOINT(-122.465, 37.807))

SELECT name, state, ARRAY_AGG(STRUCT(date,temp) ORDER BY temp DESC LIMIT 5) top_hot, MAX(date) station_until
FROM `fh-bigquery.weather_gsod.all_geoclustered`
WHERE EXTRACT(YEAR FROM date) > 1980
AND ST_DISTANCE(point_gis, (SELECT * FROM city)) < 40000
GROUP BY name, state
HAVING EXTRACT(YEAR FROM station_until)>2018
ORDER BY ST_DISTANCE(ANY_VALUE(point_gis), (SELECT * FROM city))
LIMIT 5

enter image description here

2017 年更新:标准 SQL 和最新表:
SELECT TIMESTAMP(CONCAT(year,'-',mo,'-',da)) day, AVG(min) min, AVG(max) max, AVG(IF(prcp=99.99,0,prcp)) prcp
FROM `bigquery-public-data.noaa_gsod.gsod2016`
WHERE stn='722540' AND wban='13904'
GROUP BY 1
ORDER BY day

附加示例,以显示十年来芝加哥最冷的日子:
#standardSQL
SELECT year, FORMAT('%s%s',mo,da) day ,min
FROM `fh-bigquery.weather_gsod.stations` a
JOIN `bigquery-public-data.noaa_gsod.gsod201*` b
ON a.usaf=b.stn AND a.wban=b.wban
WHERE name='CHICAGO/O HARE ARPT'
AND min!=9999.9
AND mo<'03'
ORDER BY 1,2

要检索任何城市的历史天气,首先我们需要找到该城市的气象站报告。表 [fh-bigquery:weather_gsod.stations]包含已知电台的名称、它们的州(如果在美国)、国家和其他详细信息。

因此,要查找德克萨斯州奥斯汀的所有电台,我们将使用如下查询:
SELECT state, name, lat, lon
FROM [fh-bigquery:weather_gsod.stations]
WHERE country='US' AND state='TX' AND name CONTAINS 'AUST'
LIMIT 10

enter image description here

这种方法有两个问题需要解决:
  • 该表中并非每个已知电台都存在 - 我需要获取此文件的更新版本。因此,如果您在这里没有找到您要找的车站,请不要放弃。
  • 并非在此文件中找到的每个站点每年都在运行 - 因此我们需要找到在我们正在寻找的年份中有数据的站点。

  • 为了解决第二个问题,我们需要将站表与我们正在寻找的实际数据连接起来。以下查询查找 Austin 周围的车站,以及列 c看看 2015 年有多少天有实际数据:
    SELECT state, name, FIRST(a.wban) wban, FIRST(a.stn) stn, COUNT(*) c, INTEGER(SUM(IF(prcp=99.99,0,prcp))) rain, FIRST(lat) lat, FIRST(lon) long
    FROM [fh-bigquery:weather_gsod.gsod2015] a
    JOIN [fh-bigquery:weather_gsod.stations] b
    ON a.wban=b.wban
    AND a.stn=b.usaf
    WHERE country='US' AND state='TX' AND name CONTAINS 'AUST'
    GROUP BY 1,2
    LIMIT 10

    enter image description here

    那挺好的!我们在 2015 年发现了 4 个有奥斯汀数据的站点。

    请注意,我们必须以一种特殊的方式处理“雨”:当电台不监测雨时,而不是 null ,它将其标记为 99.99。我们的查询过滤掉这些值。

    现在我们知道了这些站点的 stn 和 wban 编号,我们可以选择其中任何一个并可视化结果:
    SELECT TIMESTAMP('2015'+mo+da) day, AVG(min) min, AVG(max) max, AVG(IF(prcp=99.99,0,prcp)) prcp
    FROM [fh-bigquery:weather_gsod.gsod2015]
    WHERE stn='722540' AND wban='13904'
    GROUP BY 1
    ORDER BY day

    enter image description here

    关于sql - 如何使用 BigQuery 获取任何城市的历史天气?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34804654/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com