Синтаксический анализ вложенного JSON с использованием HiveQL

#json #hive #hiveql

#json #улей #hiveql

Вопрос:

У меня есть следующие вложенные данные формата JSON, хранящиеся в виде системного журнала, которые мне нужно запросить с помощью HiveQL и преобразовать в файл CSV (который будет использоваться для отображения графика) :

 "logAggregate": {"name-1":{"time":"74","count":"1"},"name-2":{"time":"2","count":"1"},"name-3 {"time":"2","count":"5"},"name-4":{"time":"22","count":"1"},
 。
 。
 。// and so on..
 。}
  

Формат вывода, который я ищу, примерно такой, как показано ниже:

 name-1 time
name-2 time
name-3 time
.
.
. // so on
  

Я относительно новичок в Hive, поэтому не уверен, как мне следует анализировать эти данные JSON.
Я пытался возиться с боковым обзором и json_tuple, но тщетно!

Любая помощь была бы очень признательна!

Комментарии:

1. Вы можете использовать a json-serde для определения таблицы и загрузки данных. Подробности здесь . Попробуйте это и обновите вопрос, если у вас возникли какие-либо проблемы.

Ответ №1:

Взгляните на эту запись в блоге ( http://brickhouseconfessions.wordpress.com/2014/02/07/hive-and-json-made-simple / ), который описывает использование JSON UDF, предоставленных в Brickhouse ( http://github.com/klout/brickhouse ).

В вашем конкретном случае вы, вероятно, захотите выполнить синтаксический анализ как карту, а затем выполнить разнесение на карте.

 SELECT key,
map_index( value, "time") as time_value
FROM my_table
LATERAL VIEW explode_map( from_json( json, 'map<map<string,string>>') ) kv1 as k, v;