Tôi đang tìm cách lấy HAVERSINE() trong BigQuery. Ví dụ, làm thế nào để có được các trạm thời tiết gần nhất đến một điểm tùy ý?Khoảng cách HAVERSINE trong BigQuery?
Trả lời
Sử dụng standard SQL bạn có thể định nghĩa một hàm SQL để đóng gói logic. Ví dụ,
#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;
giải pháp Legacy SQL (chờ giải tiêu chuẩn):
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
(dựa trên http://www.plumislandmedia.net/mysql/haversine-mysql-nearest-loc/)
Với SQL tiêu chuẩn mà bạn có thể đặt logic trong một UDF SQL thay vì phải đặt nó trực tiếp vào cơ thể của truy vấn. –
Tôi biết! Tôi đã thử một cách nhanh chóng, nhưng sau đó tôi đã mất tích DEGREES() và RADIANS(). Còn lại truy vấn đang chờ xử lý cho đến khi tôi tìm ra các phép biến đổi tương đương, kể cả thiếu PI(). Nhưng tôi sẽ trở lại :) –
Nhân tiện - điều này sẽ cho khoảng cách tính bằng km –
- 1. Khoảng cách vòng tròn lớn của MySQL (công thức Haversine)
- 2. Công thức Haversine với php
- 3. Tối ưu hóa một haversine thức gọi SQL trong PHP
- 4. Cách triển khai "thích" trong BigQuery?
- 5. lỗi Weird trong BigQuery
- 6. Có Autoincrement trong BigQuery không?
- 7. Vectorised Haversine công thức với một dataframe gấu trúc
- 8. Google BigQuery Delete Rows?
- 9. Làm cách nào để đặt BillingTier trong API BigQuery Ruby?
- 10. Cách đăng xuất tài khoản bằng lệnh bq trong Bigquery
- 11. MongoDB to BigQuery
- 12. Xem với các tham số trong BigQuery
- 13. BigQuery - Flexible Schema trong Record Dòng
- 14. New BigQuery giá 'tầng'
- 15. BigQuery kiểu dữ liệu
- 16. Lấy mẫu ngẫu nhiên trong Google BigQuery
- 17. Tách một cột chuỗi trong BigQuery
- 18. Dữ liệu truyền trực tuyến trong BigQuery
- 19. Trong tờ rơi, cách tính khoảng cách pixel giữa hai đối tượng LatLng?
- 20. Tổng số chạy SQL BigQuery
- 21. Cách tạo txt BigQuery bằng cách sử dụng dplyr
- 22. Làm thế nào để tập luyện công thức Haversine trong ColdFusion
- 23. Bigquery - chỉ viết ủy quyền
- 24. Tính toán mức tối đa di chuyển trong BigQuery
- 25. cách tìm khoảng cách chính xác giữa hai địa chỉ trong bản đồ?
- 26. Tôi làm cách nào để sử dụng bản vá BigQuery?
- 27. Tra cứu sản phẩm theo mã bưu điện/mã zip | Thuật toán Haversine | Hiệu suất
- 28. Khoảng cách giữa hai địa điểm không đúng
- 29. Làm thế nào để Pivot trong Google BigQuery
- 30. Cách nhận kích thước bộ nhớ BigQuery cho một bảng
ref: https://twitter.com/joaocorreia/status/827638555035840512 –