У меня есть таблица в Hive, которая генерируется чтением из файла последовательности в моей HDFS.Эти файлы последовательности имеют вид json и выглядят следующим образом:
{"Activity":"Started","CustomerName":"CustomerName3","DeviceID":"StationRoboter","OrderID":"CustomerOrderID3","DateTime":"2018-11-27T12:56:47Z+0100","Color":[{"Name":"red","Amount":1},{"Name":"green","Amount":1},{"Name":"blue","Amount":1}],"BrickTotalAmount":3}
Они передают цвета частей продукта и их количество, которое учитывается в одном прогоне процесса обслуживания.
Обратите внимание на массив json в цвет
Поэтому мой код для создания таблицы:
CREATE EXTERNAL TABLE iotdata(
activity STRING,
customername STRING,
deviceid STRING,
orderid STRING,
datetime STRING,
color ARRAY<MAP<String,String>>,
bricktotalamount STRING
)
ROW FORMAT SERDE "org.apache.hive.hcatalog.data.JsonSerDe"
STORED AS
INPUTFORMAT 'org.apache.hadoop.mapred.SequenceFileInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat'
LOCATION '/IoTData/scray-data-000-v0';
Это работает, и если ясделать выбрать * на этой таблице, это выглядит так:
Но моя проблема в том, что я должен получить доступ кданные внутри цветного столбца для анализа.Например, я хочу вычислить все красные значения в таблице.
Так что это приводит к нескольким возможностям и вопросам: как я могу привести полученную строку суммы к целому числу?
Какмогу ли я получить доступ к данным в моем столбце цвета с помощью select?
Или есть возможность изменить схему таблицы в самом начале, чтобы получить 4 дополнительных столбца для моих 4 цветов и 4 дополнительных столбца для соответствующего цветасуммы?
Я также пытался прочитать весь json как строку в один столбец и выбрать там подконтент, но этот импорт массива json в куст приводит меня только к значениям NULL, вероятнопотому что мой файл JSON не на 100% правильно сформирован.