Почему AWS Athena создает мою таблицу в виде строки, а не массива вложенных объектов

Вместо вложенной таблицы все, что я получаю, это один очень длинный заголовок, содержащий команду sql, но без ошибок. Почему он работает, но на самом деле неправильно вводит данные json?

CREATE external TABLE ranked (
    airlineRankings array<struct<
    overall_rating:TINYINT,
    seat_comfort_rating:TINYINT,
    cabin_staff_rating:TINYINT,
    food_beverages_rating:TINYINT,
    inflight_entertainment_rating:TINYINT,
    ground_service_rating:TINYINT,
    wifi_connectivity_rating:TINYINT,
    value_money_rating:TINYINT,
    recommended:TINYINT,
    review_amount:TINYINT,
    count:TINYINT,
    iata:string,
    icao:string,
    airline_link:string,
    call_sign:string,
    country:string,
    airline:string
      >>
      )
    ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
    LOCATION 's3://**********/'

Формат данных JSON:

{
    "airlineRankings": [{
        "iata": "",
        "icao": "EVY",
        "airline_link": "34 Squadron, Royal Australian Air Force",
        "call_sign": "",
        "country": "Australia",
        "airline": "34 Squadron, Royal Australian Air Force",
        "overall_rating": 0,
        "seat_comfort_rating": 0,
        "cabin_staff_rating": 0,
        "food_beverages_rating": 0,
        "inflight_entertainment_rating": 0,
        "ground_service_rating": 0,
        "wifi_connectivity_rating": 0,
        "value_money_rating": 0,
        "recommended": 0,
        "review_amount": 0
    }
]
}

person deek    schedule 14.03.2017    source источник


Ответы (1)


Ваш DDL в порядке. Если у вас возникли проблемы с запросом массива, вы, вероятно, пропустили "распаковку" объекта массива.

Пример запроса для вашей структуры будет выглядеть так:

select myRecord.icao from ranked
CROSS JOIN UNNEST(airlinerankings) AS myTable (myRecord);
person jens walter    schedule 14.03.2017
comment
HIVE_CURSOR_ERROR: строка не является допустимым объектом JSON — JSONException: текст JSONObject должен заканчиваться на «}» на 2 [символ 3, строка 1]. Получите эту ошибку. Это действительный json.... - person deek; 14.03.2017
comment
Может быть, ваш JSON содержит символы \n? - person jens walter; 14.03.2017
comment
Я добавил формат данных JSON в исходный вопрос. да, некоторые строковые значения имеют специальные символы, а не ключи. - person deek; 14.03.2017
comment
Многострочные JSON пока не поддерживаются Athena. Если я использую ваши образцы данных и удаляю все форматирование (помещаю все в одну строку), запрос выполняется нормально. - person jens walter; 14.03.2017