Я собираюсь предположить, что ваши данные представлены в формате «один документ на строку», и что вы предоставили отформатированный пример для удобства чтения.Если это неверно, см. Вопрос Запрос многострочного файла JSON в кусте .
Если схема документа JSON не совсем регулярна, вы можете создать этот столбец как * 1005.* столбец и используйте функции JSON_*
для извлечения значений из него.
Сначала вам нужно создать таблицу для необработанных данных:
CREATE TABLE data (
fields array<struct<id:string,label:string,value:string>>
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION 's3://…'
(если вас это не интересует)в других полях документов JSON вы можете просто игнорировать их при создании таблицы)
Затем вы создаете представление, которое выравнивает данные:
CREATE VIEW flat_data AS
SELECT
field.id,
field.label,
field.value
FROM data
CROSS JOIN UNNEST(fields) AS f(field)
Выбор из этого представления должен дать вамрезультаты, которые вы ищете.
Я подозреваю, что вы также ищете, как извлечь свойства из структуры values
, о чем я упоминал выше:
SELECT
label,
JSON_EXTRACT(value, '$.photo') AS photo_urls
FROM flat_data
WHERE id = 'photos_landscaped_area'
Посмотрите надокументация Presto для всех доступных функций JSON .