12

BigQuery には、1929 年以降、NOAA の gsod データが公開データセットとして読み込まれています: https://www.reddit.com/r/bigquery/comments/2ts9wo/noaa_gsod_weather_data_loaded_into_bigquery/

任意の都市の履歴データを取得するにはどうすればよいですか?

4

4 に答える 4

14

更新 2019: 便宜上

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

毎日更新 - そうでない場合はここで報告

たとえば、1980 年以降のサンフランシスコの駅の最も暑い日を取得するには、次のようにします。

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

ここに画像の説明を入力

クラスター化されたテーブルのおかげで、このクエリは 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

ここに画像の説明を入力


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

この 10 年間でシカゴで最も寒い日を示す追加の例:

#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

ここに画像の説明を入力

このアプローチには、解決する必要がある 2 つの問題があります。

  • すべての既知のステーションがそのテーブルに存在するわけではありません。このファイルの更新版を取得する必要があります。探している駅が見つからなくても諦めないでください。
  • このファイルにあるすべてのステーションが毎年運用されているわけではありません。そのため、探している年にデータがあるステーションを見つける必要があります。

2 番目の問題を解決するには、ステーション テーブルを探している実際のデータと結合する必要があります。次のクエリは、オースティン周辺のステーションを検索し、列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

ここに画像の説明を入力

それは良い!2015 年のオースティンのデータがある 4 つのステーションが見つかりました。

「雨」を特別な方法で扱わなければならなかったことに注意してください: ステーションが雨を監視していない場合、代わりにnull99.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

ここに画像の説明を入力

于 2016-01-15T04:57:57.950 に答える
1

データを取得して公開テーブルにしていただきありがとうございます。以下は、テキサス州のすべての観測所の 2014 年の総降水量を返す BigQuery です。

SELECT FIRST(name) AS station_name, stn, SUM(prcp) AS annual_precip
FROM [fh-bigquery:weather_gsod.gsod2014] gsod
JOIN [fh-bigquery:weather_gsod.stations] stations
ON gsod.wban=stations.wban AND gsod.stn=stations.usaf
WHERE state='TX' AND prcp != 99.99
GROUP BY stn

戻り値: 結果表

すべての場所で雨の日数を取得し、これに基づいて結果を並べ替えます。

SELECT FIRST(name) AS station_name, stn, SUM(prcp) AS annual_precip,     COUNT(prcp) AS rainy_days
FROM [fh-bigquery:weather_gsod.gsod2014] gsod
JOIN [fh-bigquery:weather_gsod.stations] stations
ON gsod.wban=stations.wban AND gsod.stn=stations.usaf
WHERE state='TX' AND prcp != 99.99 AND prcp > 0
GROUP BY stn
ORDER BY rainy_days DESC

思いつくこれらの結果

于 2016-02-25T23:42:09.320 に答える
0

駅名の使用は信頼できません。また、新しい bigquery 機能を使用して地理空間クエリを使用するのは困難です。これは、都市の境界が明確な形 (円や長方形など) を持たないためです。

したがって、あなたの問題に対して私が見つけた最善の解決策は、リバース ジオコーディングを使用し、緯度/経度座標を使用して、各駅の住所、州、市、郡を生成するように Google Maps API に依頼することです。

これは、米国の結果の CSV ( StationNumber,Lat,Lon,Address,State,City,County,Zip) です (98% のステーションがそこに存在することがわかります): https://gist.github.com/orcaman/a3e23c47489705dff93aace2e35f57d3

米国外のステーション (golang) で再実行する場合のコードは次のとおりです

于 2019-02-09T20:19:35.440 に答える