我在使用 JSON SerDe 对美化输出的 JSON 文件运行 Amazon Athena 查询时,结果查询失败并显示以下错误消息: “HIVE_CURSOR_ERROR: 行不是有效的 JSON 对象”。
解决方法
Athena JSON SerDe 不支持美化输出的 JSON 文件,例如以下文件:
{
"id": "b179db57-9d5b-40c8-8f07-f75bd1fa1b3c",
"random_number": 19,
"categories": [
"category 1",
"category 2"
],
"dict": {
"name": "category 1",
"comment": "category 2"
}
}
{
"id": "bc4624ce-d752-4e38-8a30-42de158dbc50",
"random_number": 95,
"categories": [
"category 1",
"category 2",
"category 3",
"category 4"
],
"dict": {
"name": "category 2",
"comment": "category 1"
}
}
{
"id": "1d3298e8-e3bb-41c0-950c-6a146555ce3c",
"random_number": 89,
"categories": [
"category 1"
],
"dict": {
"name": "category 5",
"comment": "category 3"
}
}
由于 Amazon Ion 是 JSON 的超集,因此请使用 Amazon Ion Hive SerDe 查询非 Amazon Ion JSON 数据集。与其他 JSON SerDe 库不同,Amazon Ion SerDe 不期望每行数据都在一行上。使用此功能,查询美化输出格式的 JSON 数据集,或使用换行符分割一行字段。
1. 使用 Athena Ion Hive SerDe,创建类似于如下内容的表:
CREATE EXTERNAL TABLE table_name (
id string,
random_number int,
categories array<string>,
dict struct<name:string, comment:string>
)
STORED AS ION
LOCATION 's3://sample-bucket/prefix/'
2. 查询表:
SELECT * FROM table_name
输出类似于如下内容:
# id random_number categories dict
1 b179db57-9d5b-40c8-8f07-f75bd1fa1b3c 19 [category 1, category 2] {name=category 1, comment=category 2}
2 bc4624ce-d752-4e38-8a30-42de158dbc50 95 [category 1, category 2, category 3, category 4] {name=category 2, comment=category 1}
3 1d3298e8-e3bb-41c0-950c-6a146555ce3c 89 [category 1] {name=category 5, comment=category 3}
相关信息
为什么我在 Amazon Athena 中尝试读取 JSON 数据时遇到错误?