从json事件创建AWS Athena表



我试图从存储在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))

相关内容

  • 没有找到相关文章