У меня есть json объект с вложенными объектами и массивами. Я хочу нормализовать эту json и преобразовать ее в дено-денормализованную таблицу БД с предопределенной структурой, учитывающей типы данных, такие как timestamp, text, int et c. Если некоторые поля пропущены в json, мне нужно, чтобы в таблице это было NULL. Все файлы jsons хранятся в виде паркета, а затем копируются в красное с помощью команды копирования.
Вот пример упрощенной версии такого json объекта:
{
"url": "https://zendesk.com/api/v2/tickets/154571.json",
"id": 154571,
"external_id": null,
"via": {
"channel": "email",
"source": {
"from": {
"address": "xxxx@waitrapp.com",
"name": "xxxx"
},
"to": {
"name": "xxxx",
"address": "support@xxxxx.com"
},
"rel": null
}
},
"created_at": "2018-07-03T17:14:52Z",
"collaborator_ids": ["x","a"],
"tags": ["a","b"],
"followup_ids": [1,2]
}
Вот требуемая структура после денормализации:
url,id,external_id,created_at,tags,followup_ids,via_channel,via_source_from_address,via_source_from_name
https://zendesk.com/api/v2/tickets/154571.json,154571,,2018-07-03T17:14:52Z,tag-a,1,email,xxxx@waitrapp.com,xxxx
https://zendesk.com/api/v2/tickets/154571.json,154571,,2018-07-03T17:14:52Z,tag-a,2,email,xxxx@waitrapp.com,xxxx
https://zendesk.com/api/v2/tickets/154571.json,154571,,2018-07-03T17:14:52Z,tag-b,1,email,xxxx@waitrapp.com,xxxx
https://zendesk.com/api/v2/tickets/154571.json,154571,,2018-07-03T17:14:52Z,tag-b,2,email,xxxx@waitrapp.com,xxxx
Вот таблица:
create table adhoc_temp.zendesk_tickets
(
url text,
id bigint,
external_id text,
created_at timestamp,
tags text,
collaborator_ids int,
via_channel text,
via_source_rel text,
via_source_from_ticket_id int,
via_source_from_subject text,
via_source_from_address text,
via_source_from_name text,
via_source_to_name text,
via_source_to_address text
);
В этом случае поля via_source_from_ticket_id
, via_source_from_subject
отсутствуют в источнике json, поэтому в таблице они должны быть NULL.
Я играл с json_normalize
, но он не учитывает массивы. В любом случае, как я могу присоединить вложенные массивы к основному json объекту?