我需要编写一个hive查询,该查询将从包含lat lon列的表中提取并返回给定点x英里范围内的结果。 Hive是否需要一个工具包或插件?
我正在使用在HDInsight上运行的Hadoop(3.2.7.844)
答案 0 :(得分:1)
抱歉,如果我理解你正确使用案例,你也可以在查询中写一个很大的数学函数。 在查询中编写数学函数将是一个令人头痛的问题,但从hive查询的角度来看它应该是可行的。
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 :(得分:0)
Apache Hivemall支持给定两个地理位置之间的Haversine distance计算。
-- 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;