Amazon Athena: изменить таблицу, чтобы игнорировать искаженные ошибки JSON - PullRequest
0 голосов
/ 30 ноября 2018

Это не работает: ALTER TABLE 'table' SET SERDEPROPERTIES ("ignore.malformed.json" = "true");

1 Ответ

0 голосов
/ 03 декабря 2018

Проблема, с которой вы столкнулись, заключается в том, что Афина использует язык престо , а не язык улья для DDL.Думайте об Афинах (Presto) как о подмножестве языка Hive , в то время как он все еще является полнофункциональным языком ANSI-SQL.К сожалению, вы пытаетесь использовать команду , которая не поддерживается оператором DDL , к сожалению.

Вам придется воссоздать таблицу , добавив свойства:

 CREATE EXTERNAL TABLE impressions (
        id string,        
        awesomeness struct<
           modellookup:string, 
           requesttime:string>     
    )   PARTITIONED BY (dt string)
    ROW FORMAT  serde 'org.openx.data.jsonserde.JsonSerDe'
    with serdeproperties ( 'ignore.malformed.json'='true' )
    LOCATION 's3://myregion.awesome/awesome';

НЕ ЭТО ОДИН (ignore.malformed.json недоступен)

CREATE EXTERNAL TABLE impressions (
        id string,        
        awesomeness struct<
           modellookup:string, 
           requesttime:string>     
    )   PARTITIONED BY (dt string)
    ROW FORMAT  serde 'org.apache.hive.hcatalog.data.JsonSerDe'
    with serdeproperties ( 'paths'='id' )
    LOCATION 's3://myregion.awesome/awesome';

Я добавлю для полноты, что последняя документация SerDe

Hive JSON SerDe

Hive JSON SerDe используется для обработки данных JSON, чаще всего событий.Эти события представлены в виде блоков текста в кодировке JSON, разделенных новой строкой.

Вы также можете использовать Hive JSON SerDe для анализа более сложных данных в кодировке JSON с вложенными структурами.Однако для этого требуется наличие соответствующего DDL, представляющего сложные типы данных.

OpenX JSON SerDe

Этот SerDe имеет полезное свойство, которое можно указать при создании таблиц в Афине,чтобы помочь устранить несоответствия в данных:

  • 'ignore.malformed.json', если задано значение TRUE, позволяет пропустить искаженный синтаксис JSON.
...