我正在使用Hive和get_json_object()
函数来查询存储为JSON的数据。 JSON具有一个coordinate
键和两个字段(纬度和经度),如下所示:
"coordinate":{
"center":{
"lat":36.123413127558536,
"lng":-115.17381648045654
},
"precision":10
}
我正在运行Hive查询以检索某个地理坐标框中的数据,如下所示:
INSERT OVERWRITE LOCAL DIRECTORY '/home/user.name/sample/sample1.txt'
SELECT * FROM mytable
WHERE
get_json_object(mytable.`value`, '$.coordinate.center.lat') > 36.115767
AND get_json_object(mytable.`value`, '$.coordinate.center.lng') > -115.314051
AND get_json_object(mytable.`value`, '$.coordinate.center.lat') < 36.285595
AND get_json_object(mytable.`value`, '$.coordinate.center.lng') < -115.085399
DISTRIBUTE BY rand()
SORT by rand()
LIMIT 10000;
但是,问题是某些行缺少coordinate
字段,或者缺少center
字段,或者是lat
和/或lng
字段不见了。如何修改我的Hive SELECT
查询,使其仅包含具有完整coordinate
和lat
的完整有效lng
条目的行?
答案 0 :(得分:1)
我将为您在其中的表格做一个单独的查看
WHERE get_json_object(...) IS NOT NULL
您感兴趣的每个字段。
然后在该视图上运行给定查询
或者,修复输入源,以改用Avro生成一些一致的数据,例如