Я просматриваю следующий файл JSON (это действительный JSON) из озера данных s3. Внутри есть 2 поля (устройство, отметка времени) и массив объектов, называемых данными. Каждый объект в массиве данных отличается друг от друга.
{
"device": "0013374838793C8",
"timestamp": "2019-03-04T14:44:39Z",
"data": [
{ "eparke_status": "09" },
{ "eparke_x": "FFF588" },
{ "eparke_y": "000352" },
{ "eparke_z": "000ACC" },
{ "eparke_temp": "14.00" },
{ "eparke_voltage": "4.17" }
]
}
К сожалению, когда я сканирую с помощью AWS Glue, невозможно правильно вывести схему искателя, и то, что я получил в Athena, не соответствует моим ожиданиям.
В следующем листинге показан ряд данных из AWS Athena.
1 0013374838793C8 2019-03-05T13:11:41Z [{eparke_status=0B, eparke_x=null, eparke_y=null, eparke_z=null, eparke_temp=null, eparke_voltage=null}, {eparke_status=null, eparke_x=FFF6D4, eparke_y=null, eparke_z=null, eparke_temp=null, eparke_voltage=null}, {eparke_status=null, eparke_x=null, eparke_y=000133, eparke_z=null, eparke_temp=null, eparke_voltage=null}, {eparke_status=null, eparke_x=null, eparke_y=null, eparke_z=000DA3, eparke_temp=null, eparke_voltage=null}, {eparke_status=null, eparke_x=null, eparke_y=null, eparke_z=null, eparke_temp=14.00, eparke_voltage=null}, {eparke_status=null, eparke_x=null, eparke_y=null, eparke_z=null, eparke_temp=null, eparke_voltage=4.17}]
Как видите, для каждого объекта внутри массива схема обнаруживается неправильно. Каждый столбец в БД содержит ВСЕ поля объектов массива, большинство из которых просто установлены как пустые, что понятно, потому что они не найдены. Обнаруженная схема - это не то, что я ищу.
Ожидания
В следующем листинге показана ожидаемая форма строки таблицы после сканирования с помощью AWS Glue.
1 0013374838793C8 2019-03-05T13:11:41Z eparke_status=0B eparke_x=FFF6D4 eparke_y=000133 eparke_z=000DA3 eparke_temp=14.00 eparke_voltage=4.17
Что я пробовал до сих пор?
Классификаторы AWS Glue Для создания схемы я попытался использовать классификаторы.
$.device $.timestamp $.eparke_status $.eparke_x $.eparke_y $.eparke_z $.eparke_temp $.eparke_voltage
а также
$.device $.timestamp $.data[0].eparke_status $.data[1].eparke_x $.data[2].eparke_y $.data[3].eparke_z $.data[4].eparke_temp $.data[5].eparke_voltage
Тем не менее, окончательная схема выглядит так же - все объекты упакованы внутри каждого столбца.
Есть идеи, как решить эту проблему? Я также пытаюсь настроить задание ETL с помощью специального сценария, но пока не удалось.