8

我有一个简单的 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;

并得到一个错误:

查询 bceb274d-309f-40d5-a893-570de5f4ca4e 失败,错误代码 HIVE_CURSOR_ERROR: Row is not a valid JSON Object - JSONException: Missing value at 1 [character 2 line 1]

我哪里错了?

4

1 回答 1

17

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

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

在 Python 中,我生成的 JSON 记录如下:

import json
dStatsRecord = {} # a valid json dict
with open('myfile.json', 'r') as oFile:
  json.dump(dStatsRecord, oFile, separators=(',', ':'))
于 2016-12-25T22:28:56.903 回答