#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;