BigQueryでHAVERSINE()を取得する方法を探しています。たとえば、最も近い気象観測所を任意の地点に取得する方法は?BigQueryのHAVERSINE距離?
答えて
あなたはロジックをカプセル化するためにSQL関数を定義することができますstandard SQLを使用します。例えば、
#standardSQL
CREATE TEMP FUNCTION RADIANS(x FLOAT64) AS (
ACOS(-1) * x/180
);
CREATE TEMP FUNCTION RADIANS_TO_KM(x FLOAT64) AS (
111.045 * 180 * x/ACOS(-1)
);
CREATE TEMP FUNCTION HAVERSINE(lat1 FLOAT64, long1 FLOAT64,
lat2 FLOAT64, long2 FLOAT64) AS (
RADIANS_TO_KM(
ACOS(COS(RADIANS(lat1)) * COS(RADIANS(lat2)) *
COS(RADIANS(long1) - RADIANS(long2)) +
SIN(RADIANS(lat1)) * SIN(RADIANS(lat2))))
);
SELECT
lat,
lon,
name,
HAVERSINE(40.73943, -73.99585, lat, lon) AS distance_in_km
FROM `bigquery-public-data.noaa_gsod.stations`
WHERE lat IS NOT NULL AND lon IS NOT NULL
ORDER BY distance_in_km
LIMIT 4;
レガシーSQL溶液(標準申請中):(http://www.plumislandmedia.net/mysql/haversine-mysql-nearest-loc/に基づく)
SELECT lat, lon, name,
(111.045 * DEGREES(ACOS(COS(RADIANS(40.73943)) * COS(RADIANS(lat)) * COS(RADIANS(-73.99585) - RADIANS(lon)) + SIN(RADIANS(40.73943)) * SIN(RADIANS(lat))))) AS distance
FROM [bigquery-public-data:noaa_gsod.stations]
HAVING distance>0
ORDER BY distance
LIMIT 4
するのではなく、クエリの体内に直接それを置くために持つよりも、SQL UDFのロジックを置くことができます。 –
私は知っている!私はすぐに試しましたが、DEGREES()とRADIANS()が欠けていました。 PI()の不足を含む同等の変換を把握するまで、クエリを保留にしておきます。しかし、私は戻ってくるよ:) –
ところで - これはkm単位の距離を与える –
- 1. 2つのデータフレーム間のHaversine距離の計算
- 2. Haversine公式エラー - 間違った距離 - Arduino
- 3. Ruby:ユニークな値の配列をチェックし、最小距離を返す(haversineの式)
- 4. 距離
- 5. 距離
- 6. 距離、
- 7. ロボットの距離
- 8. 距離のクエリ
- 9. Haversine公式を使用してPHPの2つのポストコード間の距離を計算する
- 10. DNAハミング距離
- 11. カメラフォーカス距離テスト
- 12. R:ggplot距離式
- 13. CSS、バックグラウンドリピート距離
- 14. ユークリッド距離
- 15. ペアワイズ距離が
- 16. 逆レーベンシュタイン距離
- 17. ピクセル距離
- 18. Fmod距離パラメータ
- 19. 距離メトリックヒューリスティックinformedness
- 20. マハラノビス距離
- 21. ハミング距離
- 22. apache.commons.textコサイン距離
- 23. 検索距離
- 24. R data.table距離
- 25. 距離の2乗と距離の実際のメリット
- 26. Googleの距離API
- 27. Levenshteinリストの距離
- 28. SQLの距離式
- 29. 2 System.Drawing.Pointの距離
- 30. チェビシェフ距離のダイクストラアルゴリズム
参照:標準SQLでhttps://twitter.com/joaocorreia/status/827638555035840512 –