查询在亚马逊雅典娜创建的表时获取HIVE_CURSOR_ERROR

时间:2017-06-20 07:57:39

标签: amazon-web-services amazon-athena

我在查询Amazon Athena中创建的表时遇到以下错误。

错误

HIVE_CURSOR_ERROR:行不是有效的JSON对象 - JSONException:JSONObject文本必须在2处以'}'结尾

我正在使用的示例文件和创建表的查询如下所示。通过以下查询成功创建表,但是当我从表中获取结果时,我收到错误。请提供宝贵的建议。

注意 Sample Data          Create table

2 个答案:

答案 0 :(得分:4)

AWS Athena不支持多行JSON。

Athena knowledge center

  

确保您的JSON记录在一行

     

Athena目前不支持多行JSON记录。

答案 1 :(得分:0)

我正在滥用答案字段,以留出更多空间,并对此有所构想。我希望这对任何使用Athena的人都是有用的。

我正在使用Athena创建两个表。在两个单独的存储桶文件夹和两个相应表中的基于单行json和基于多行json的报告。

JSON中的单行报告非常简单。对于表创建,我使用以下驱动程序:

ROW FORMAT serde 'org.apache.hive.hcatalog.data.JsonSerDe'

但是,如果您使用此确切的一项来消耗多行,则会出现错误,另外还有三件事( I II III < / strong>)。首先是不同的驱动程序:

ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'

然后

(无效)JSON格式。我的多行文件如下所示:

{"key": "value"}
{"key": "value"}

请注意,每行只有一个JSON对象,并且对象用逗号分隔! 您可以在这里阅读有关内容:

Store multiple elements in json files in AWS Athena

II 创建语句

与您创建表@abc的屏幕截图相反,我没有嵌套结构使用它:

CREATE EXTERNAL TABLE IF NOT EXISTS internal_reports (
`Date` Date,
impressions INT,
reach INT,
follower INT,
...
)

III 日期属性

我遇到了整个驱动程序测试过程,因为Date属性在单行表中引起了问题,因为Date的值具有不等于午夜的时间信息。对于其他多行报告,我的日期还可以(时间恰好是午夜)。您可以在这里阅读有关内容:

https://developer.ibm.com/answers/questions/177238/timestamp-format-must-be-yyyy-mm-dd-hhmmssffffffff/ Athena - DATE column correct values from JSON

欢呼