繁体   English   中英

从 json 事件创建 AWS Athena 表

[英]Create AWS Athena table from json event

我正在尝试从存储在 S3 中的 json 事件文件创建 AWS Athena 表。 我的 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/';

这给了我一个解析的输出,然后我可以运行选择或创建一个视图以表格格式显示我的数据:

CREATE OR REPLACE VIEW "v_events" AS
SELECT
  item.string1,
  item.string2,
  item.string3
FROM
  (events
CROSS JOIN UNNEST("details") t (item))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM