我正在通过lambda函数上传一个缩小的JSON文件到S3,该函数使用API调用提取数据并将一些数据保存为JSON。然后,胶水爬行器会在桶中爬行并找到一个新的JSON文件。Crawler将表添加到数据目录中的数据库中。当我查询数据库在雅典娜我得到下面的错误信息。我不确定为什么字段可能是完整的JSON对象而不是INT值。下面是我所能描述的最好的设置。
任何解决方案或想法将不胜感激。
查询:SELECT * FROM database_name>"."<限制10;>
错误信息:HIVE_BAD_DATA:错误解析字段值'{'id': 1, 'name': '某些名称','is_active': true}'对于字段0:org.openx.data.jsonserde.json.JSONObject不能转换为java.lang.Integer.
示例文件名:& lt; time_uploaded>. json12:00:00.json
示例JSON(实际值被缩小):
[
{'id': 1, 'name': 'some name', 'is_active': true},
{'id': 1, 'name': 'some name', 'is_active': true},
{'id': 1, 'name': 'some name', 'is_active': true}
]
斗路径:& lt; bucket_name>& lt; database_name>& lt; table_name>/& lt; date_uploaded>/
JSON分类器:美元[*]
现在不能测试,但我要这样做:
- 用双引号(")代替单引号(')来括住JSON文档中的键和字符串值;我不确定雅典娜是否可以读取单引号JSON。
- 从列表中删除每个条目并将其视为新行JSON文档。例:
{"id" 1、"name":"一些name","is_active":真正} n
{"id" 1、"name":"一些name","is_active":真正} n
{"id" 1、"name":"一些name","is_active":真正} n
奥林匹克广播服务公司。记住,Athena不能在同一行读取多个JSON文档。它只读取文本文件每行上的第一个出现。
- 检查是否存在错误或未转义的引号