Перенос вложенных JSON на новую строку в AWS Glue - PullRequest
1 голос
/ 02 апреля 2020

У меня есть файл JSON в S3 Bucket, который мне нужно преобразовать в JSON, где содержащийся в нем массив был разделен, так что по одному элементу массива в каждой строке. Вот как выглядит мой файл:

{"variable":"VALUE", "variable1":"VALUE1", "variable2":"VALUE2", "arrayvariable":[{"nestedelement":"VALUEa","nestedelement1":"VALUEb","unixtimestamp":bigint}]}
{"variable":"VALUE3", "variable1":"VALUE4", "variable2":"VALUE5", "arrayvariable":[{"nestedelement":"VALUEc","nestedelement1":"VALUEd","unixtimestamp":bigint1},{"nestedelement":"VALUEe","nestedelement1":"VALUEf","unixtimestamp":bigint2}]}
...

Как видите, список из JSON объектов, каждый из которых разделен переводом строки, последний элемент объекта - это массив из одного или нескольких Структуры. Схема, которую я получаю при сканировании этого файла в AWS Клей, выглядит следующим образом:

variable string
variable1 string
variable2 string
arrayvariable array<struct<nestedelement:string,nestedelement1:string,unixtimestamp:bigint>>

Это кажется разумным.

Что мне тогда нужно, так это таблица, содержащая следующее:

variable variable1 arrayvariable.nestedelement arrayvariable.nestedelement1 arrayvariable.unixtimestamp

VALUE VALUE1 VALUEa VALUEb bigint
VALUE3 VALUE4 VALUEc VALUEb bigint1
VALUE3 VALUE4 VALUEe VALUEf bigint2

Это таблица, которая содержит значения первой переменной по мере их поступления, но дублирует их для каждого элемента массива, просто изменяя второе издание, чтобы соответствовать элементам второго массива и так далее. Я знаю, что было бы предпочтительно использовать вторую таблицу для хранения содержимого массива с внешним ключом для набора данных, к которому он принадлежит. Однако это не тот случай использования, который у нас есть.

В настоящий момент я получаю следующую таблицу:

variable variable1 arrayvariable unixtimestamp

VALUE VALUE1 "[{""nestedelement"": ""VALUEa""
VALUE3 VALUE4 "[{""nestedelement"": ""VALUEa""

Таким образом, часть массива отсутствует, но столбец с массив всегда содержит [{. Для unixtimestamp есть отдельный столбец, но он пуст. Таинственным образом в некоторых наборах данных поле для arrayvariable также пусто.

Я много чего пытался исправить. Одно редактирование привело к тому, что столбец переменных массива просто содержал весь массив, но отсутствовал в некоторых строках. Некоторые правки записали JSON файлов в мое ведро S3, которое также содержало массив, как указано выше, но у Афины не было бы его.

Вторая часть того, что мне нужно, это причина, я сейчас пишу результаты мое превращение в S3 Bucket: мне нужно, чтобы все это было доступно из QuickSight в конце. Насколько я знаю, есть способ заставить эту работу работать с Афиной, но я еще не слишком разбирался в этом, потому что база все еще отсутствует.

Как я могу решить эту проблему?

...