【问题标题】:Dealing with multi-line JSON? (And, bonus points, CRLF)处理多行 JSON? (并且,奖励积分,CRLF)
【发布时间】:2020-05-13 17:28:26
【问题描述】:

我正在尝试创建和查询正在读取 JSON 文件的 Athena 表,但它在换行符上阻塞。更难的是,它们目前是 windows 换行符 (CRLF)

错误信息:

HIVE_CURSOR_ERROR: Row is not a valid JSON Object - JSONException: A JSONObject text must end with '}' at 2 [character 3 line 1]

为了便于阅读,我们的 JSON 看起来像这样(每个文件一行,虽然我们有嵌套数组,但这里不包括在内)。

{
  "event" : "REQUEST",
  "globalTransactionId" : "8de9e1b8-3ab0-4c3b-8b85-cae4e58257a7",
  "inboundIdentifierValue" : "22",
  "timeStamp" : "2020-03-19T20:36:42.864Z",
  "elapsedTime" : 0
}

我的创建表看起来像这样,如果我去掉所有换行符,它就可以工作。

我已经尝试过 openx serde 和 org.apache.hive.hcatalog.data.JsonSerDe

CREATE EXTERNAL TABLE TestA(
event string,
globaltransactionid string,
inboundidentifiervalue string,
`timestamp` string,
elapsedtime bigint
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION 's3://mybucker/test/' 

有什么合理的方法可以使这项工作,还是我们必须更改文件格式?

【问题讨论】:

  • 看起来这是 Hive 的一般问题;理论上你可以通过编写自己的 Serde 来修复它,但 Athena 不支持。

标签: hive amazon-athena


【解决方案1】:

【讨论】:

  • 是和否...阅读更多内容,Cloudtrail 日志 SerDe 似乎可以读取多行 JSON...但尝试将其与非 cloudtrail 日志一起使用只会引发错误,至少用我的数据。
  • 是的,CloudTrail 是一个特例。 CloudTrail 日志不是多行的,只有一行,单个文档包含 Records 属性,而该属性又包含一系列事件。 CloudTrail SerDe 解压缩了该结构,并且仅针对该用例而设计。
  • 感谢您的解释!我在其他地方找到了他们提到用它读取多行 JSON 的地方,显然不正确。
猜你喜欢
  • 1970-01-01
  • 2012-07-29
  • 2016-02-19
  • 1970-01-01
  • 1970-01-01
  • 2022-12-01
  • 2017-03-15
  • 1970-01-01
  • 2013-01-08
相关资源
最近更新 更多