我试图从存储在S3中的json事件文件创建一个AWS雅典娜表。我似乎有麻烦的格式我的json事件。事件以以下格式传递:
"[{"String1":123,"String2":"abc","String3":"def"}]"
当我创建表时,它不显示任何数据,因为我认为它不能读取json字符串。我的表创建代码是:
CREATE EXTERNAL TABLE events (
String1 string,
String2 string,
String3 string
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION 's3://events/';
我很确定我需要其他配置有我的json事件的格式被正确解析,但我不确定是什么。如果我将json事件设置如下,它就会按预期创建并工作。
{"String1":"123","String2":"abc","String3":"def"}
是否有人有任何指针,我需要做什么为我的文件格式被正确读取/解析?
谢谢。
更新
我已经设法得到我的json数据交付没有,所以现在只需要处理开始和结束括号
[...]
,
[{"String1":123,"String2":"abc","String3":"def"}]
,因为这也会导致我的表出现问题,因为将所有数据放入第一行。没有[…]它的位置是正确的。我想我需要使用一个数组,所以看看。
我已经使用数组解决了这个问题,正如大多数人所期望的那样。
我的Athena创建表查询因此:
CREATE EXTERNAL TABLE events (
`details` array<struct<
String1:string,
String2:string,
String3:string >>
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION 's3://events/';
这给了我一个解析后的输出,然后我可以运行select's或创建一个视图,以表格式显示我的数据:
CREATE OR REPLACE VIEW "v_events" AS
SELECT
item.string1,
item.string2,
item.string3
FROM
(events
CROSS JOIN UNNEST("details") t (item))