由于错误,我有以下数据:
{
"eventType": "something",
"details": {
"userName": "NotSet",
"username": "test@email.com"
},
"createdAt": 3
}
创建表的工作原理是:
CREATE EXTERNAL TABLE tbl (
eventType string,
`createdAt` string,
details string
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION 's3://xx/yy'
但是,当我查询(尝试将详细信息更改为字符串,结构,映射,始终相同)时,出现重复键错误:
HIVE_CURSOR_ERROR: Row is not a valid JSON Object - JSONException: Duplicate key "username"
如果您将它们用作行列,而不是用作映射键甚至字符串,它们是重复的,为什么它会失败?org.apache.hive.hcatalog.data.JsonSerDe
可以跳过,但我不喜欢它,因为 %99.5 数据是这样的。org.apache.hive.hcatalog.data.JsonSerDe
始终失败。
现在可以设置一个参数,以满足仅大小写不同的键。名称case.insensitive
,应设置为FALSE
例:
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES ("case.insensitive" = "FALSE")
https://docs.aws.amazon.com/athena/latest/ug/json-serde.html#openx-json-serde
Presto 不支持区分大小写的列名(它们总是转换为小写),因此不可能有多个仅大小写不同的列。