2016-03-04 1022 views
1

我需要編寫hive查詢,該查詢將從包含經緯度列的表格中拉出,並返回距給定點x英里內的結果。蜂巢是否需要一個工具包或插件?Hive:兩點之間的距離

我使用Hadoop(3.2.7.844)上HDInsight

+0

類似的問題 - http://gis.stackexchange.com/questions/185494/proximity-query-in-hive-using-esri-geospatial-library –

回答

1

對不起運行,你也可以只寫在查詢一個很大的數學函數,如果我理解正確使用的情況下。 在查詢中編寫數學函數將是一件令人頭疼的事情,但從配置單元查詢的角度來看,它應該是可行的。

dlon = lon2 - lon1 
dlat = lat2 - lat1 
a = (sin(dlat/2))^2 + cos(lat1) * cos(lat2) * (sin(dlon/2))^2 
c = 2 * atan2(sqrt(a), sqrt(1-a)) 
d = R * c (where R is the radius of the Earth). 

哪裏條件篩選器可以根據你的X英里內找到。 以下路徑顯然更易於管理和清潔。

是的,您需要的不僅僅是Hive開箱即用的功能。

基本上有兩條路可以走。

  1. 寫你自己的UDF(它非常簡單)。這可能是一個標量UDF,它將以x英里爲參數並將您的觀點作爲參數並返回表格(lat,long)的行,這些行以x英里爲參數點。在UDF中,可以實現一個函數來計算提供給UDF的表格的參數點和行之間的距離。如果距離小於x英里,則返回。
  2. 或者你可以使用已經被其他人寫了這樣UDF/UDTFs。作爲開源的Hive受益匪淺。你可以把這個庫ESRI庫做你的東西https://github.com/Esri/gis-tools-for-hadoop。還有很多其他此類庫可用。
+0

謝謝。看起來我需要學習如何爲這兩條路徑中的任何一條更新HDInsight。我想我找到一個,但尚未確定如何將其提供給我的蜂巢查詢: https://issues.apache.org/jira/secure/attachment/12619610/hive-6006.patch – Roger

0

Apache Hivemall支持給出了兩個地理地點之間Haversine distance計算。在GIS.SE

-- Tokyo (lat: 35.6833, lon: 139.7667) 
-- Osaka (lat: 34.6603, lon: 135.5232) 
select 
    haversine_distance(35.6833, 139.7667, 34.6603, 135.5232) as km, 
    haversine_distance(35.6833, 139.7667, 34.6603, 135.5232, true) as mile;