json - 无法使用 AWS Athena 加载简单的 Json 文件

标签 json amazon-web-services amazon-athena

我有一个简单的 JSON 文件:

{'oldname':'mau'}

在 AWS Athena 中,我希望读取此文件并创建匹配表 t
CREATE EXTERNAL TABLE IF NOT EXISTS stats_json.t (
  `oldname` string 
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
  'serialization.format' = '1'
) LOCATION 's3://mybucket/stats/';

然后我尝试查询:
select * from t limit 10;

并得到一个错误:

Query bceb274d-309f-40d5-a893-570de5f4ca4e failed with error code HIVE_CURSOR_ERROR: Row is not a valid JSON Object - JSONException: Missing value at 1 [character 2 line 1]



我哪里出错了?

最佳答案

我让它工作了,所以要回答我自己的问题,问题出在 JSON 文件的格式上。
似乎 AWS Athena(以及 org.openx.data.jsonserde.JsonSerDe)对它读取的 JSON 文件的格式相当挑剔。

每个 JSON 记录必须完全位于 1 行文本上,键和值之间没有空格。

在 Python 中,我按如下方式生成了 JSON 记录:

import json
dStatsRecord = {} # a valid json dict
with open('myfile.json', 'r') as oFile:
  json.dump(dStatsRecord, oFile, separators=(',', ':'))

关于json - 无法使用 AWS Athena 加载简单的 Json 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41204545/

相关文章:

Flutter中对象的JSON序列化和反序列化

javascript - 将数字设置为 json 对象的类

java - 有没有办法使用 libgdx 一次加载整个目录?

amazon-web-services - AWS - 从 VPC 内的 Lambda 函数向 SQS 发送消息

hadoop - 更新分区的最佳方法是什么?

c - 删除 R/C 中的字节顺序标记

ios - 实现类似于 Evernote 的同步功能

amazon-web-services - AWS JIRA CloudFormation

amazon-web-services - AWS Athena 是否支持 Array_AGG 中的 Order by?

amazon-s3 - 使用正则表达式将日志从 S3 导入到 Athena