蜂巢get_json_object():如何检查JSON字段是否存在?

时间:2018-07-25 20:02:52

标签: hadoop hive hiveql

我正在使用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查询,使其仅包含具有完整coordinatelat的完整有效lng条目的行?

1 个答案:

答案 0 :(得分:1)

我将为您在其中的表格做一个单独的查看

WHERE get_json_object(...) IS NOT NULL 

您感兴趣的每个字段。

然后在该视图上运行给定查询

或者,修复输入源,以改用Avro生成一些一致的数据,例如