amazon athena:更改表以忽略格式错误的json错误

jhiyze9q  于 2021-06-27  发布在  Hive
关注(0)|答案(1)|浏览(354)

这不起作用:

ALTER TABLE 'table' SET SERDEPROPERTIES( "ignore.malformed.json" = "true");
elcex8rz

elcex8rz1#

你的问题是雅典娜在ddl中使用的是presto语言而不是hive语言。可以将athen(presto)看作配置单元语言的一个子集,同时仍然是一种功能齐全的ansisql语言。很遗憾,您尝试使用的命令不是受支持的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文档
配置单元json serde
配置单元json serde用于处理json数据,最常见的是事件。这些事件表示为以新行分隔的json编码文本块。
您还可以使用配置单元json serde来解析具有嵌套结构的更复杂的json编码数据。但是,这需要具有表示复杂数据类型的匹配ddl。
openx json服务器
这个serde有一个有用的属性,您可以在athena中创建表时指定,以帮助处理数据中的不一致:
“ignore.malformed.json”如果设置为true,则可以跳过格式错误的json语法。

相关问题