Hadoop生態的數據處理引擎Hive,內置支持處理結構化的數據存儲格式,如CSV、TSV、AVRO、PARQUET等。但是對于非結構化的JSON格式數據處理則較為棘手,需要自己實現UDF函數或使用其他外部庫。
--例子1:自定義UDF函數解析JSON數據,查詢Hive中的JSON數據 CREATE TEMPORARY FUNCTION parse_json AS 'com.example.udf.ParseJsonUDF'; SELECT parse_json(json_field) FROM json_table;
自定義UDF函數需實現org.apache.hadoop.hive.ql.exec.UDF接口或其子類,并重寫evaluate()方法。代碼如下:
public class ParseJsonUDF extends UDF { public String evaluate(String json) throws JSONException { JSONObject jsonObject = new JSONObject(json); return jsonObject.getString("field_name"); } }
使用外部庫解析JSON格式數據,常用的庫有JsonSerde和Hive-JSON-Serde。以JsonSerde為例:
--例子2:JsonSerde庫解析JSON數據,查詢Hive中的JSON數據 ADD JAR /path/to/json-serde-1.3.9.jar; --添加JsonSerde庫 CREATE EXTERNAL TABLE json_table (json_field STRING) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' STORED AS TEXTFILE; SELECT json_field->>'$.field_name' FROM json_table;
使用JsonSerde庫需先下載jar包,并使用ADD JAR命令添加到Hive中。創建表時需要指定JsonSerDe序列化器,再使用json_field->>'$.field_name'語法查詢JSON字段。
上一篇docker主要用在哪