Ich suche nach einer Möglichkeit, HAVERSINE() in BigQuery zu erhalten. Zum Beispiel, wie man die nächsten Wetterstationen zu einem beliebigen Punkt bringt?HAVERSINE Entfernung in BigQuery?
Antwort
standard SQL Verwenden Sie eine SQL-Funktion definieren können, um die Logik zu kapseln. Zum Beispiel
#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;
Legacy-SQL-Lösung (Standard pending):
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
(basierend auf http://www.plumislandmedia.net/mysql/haversine-mysql-nearest-loc/)
Mit Standard-SQL können Sie die Logik in einer SQL UDF setzen, anstatt sie in die Körper der Abfrage direkt zu setzen. –
Ich weiß! Ich habe es schnell versucht, aber dann habe ich DEGREES() und RADIANS() vermisst. Ich habe die Anfrage ausstehen lassen, bis ich die entsprechenden Transformationen gefunden habe, einschließlich des Fehlens von PI(). Aber ich komme wieder :) –
Übrigens - das wird die Entfernung in km geben –
- 1. Python sklearn KDTree mit Haversine Entfernung
- 2. Haversine Formel mit PHP
- 3. Wofür stehen 'a' und 'c' in 'Haversine Formel', um die Entfernung zwischen zwei Punkten zu messen?
- 4. Haversine in MySQL gespeicherte Funktion
- 5. Eine effizientere Haversine-Funktion
- 6. Haversine-Formel Einheit
- 7. Haversine gibt mir kein korrektes Ergebnis
- 8. Haversine Formel gibt Null in Abfrage
- 9. einen Haversine Formel SQL-Aufrufs in PHP
- 10. Fehlerraten zwischen Haversine und Vincenty
- 11. Spring Query: Haversine Formel mit seitenweise
- 12. Haversine-Formel auf einer Firebird-Datenbank
- 13. Ungenaues Ergebnis aus der Bearings-Berechnung von Haversine
- 14. Entfernung zwischen zwei Standorten ist nicht richtig
- 15. Unable Entfernung in Zsh
- 16. Levenshtein Entfernung in VBA
- 17. Levenshtein Entfernung in Swift3
- 18. Entfernung bearbeiten in Python
- 19. So rufen Sie Daten von einem Datenrahmen in Haversine-Funktion
- 20. Rang() in bigquery
- 21. Weird-Fehler in BigQuery
- 22. Mehrdeutiger Spaltenname in BigQuery
- 23. IgnoreUnknownValues in BigQuery
- 24. Zeilennummer in BigQuery?
- 25. Wie in Google BigQuery
- 26. Bigquery nicht in gleichwertigem
- 27. Tabellen in Bigquery verschmelzen
- 28. Wie in BigQuery
- 29. Weighted Average in BigQuery
- 30. Null-Ereignisse in BigQuery
ref: https://twitter.com/joaocorreia/status/827638555035840512 –