相关疑难解决方法(0)

在AWS Athena中将多个元素存储在json文件中

我有一些存储在S3存储桶中的json文件,其中每个文件都有多个结构相同的元素.例如,

[{"eventId":"1","eventName":"INSERT","eventVersion":"1.0","eventSource":"aws:dynamodb","awsRegion":"us-west-2","image":{"Message":"New item!","Id":101}},{"eventId":"2","eventName":"MODIFY","eventVersion":"1.0","eventSource":"aws:dynamodb","awsRegion":"us-west-2","image":{"Message":"This item has changed","Id":101}},{"eventId":"3","eventName":"REMOVE","eventVersion":"1.0","eventSource":"aws:dynamodb","awsRegion":"us-west-2","image":{"Message":"This item has changed","Id":101}}]
Run Code Online (Sandbox Code Playgroud)

我想在Athena中创建一个与上述数据相对应的表格.

我写的用于创建表的查询:

CREATE EXTERNAL TABLE IF NOT EXISTS sampledb.elb_logs2 (
  `eventId` string,
  `eventName` string,
  `eventVersion` string,
  `eventSource` string,
  `awsRegion` string,
  `image` map<string,string> 
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
  'serialization.format' = '1',
  'field.delim' = ' '
) LOCATION 's3://<bucketname>/';
Run Code Online (Sandbox Code Playgroud)

但如果我按如下方式进行SELECT查询,

SELECT * FROM sampledb.elb_logs4;
Run Code Online (Sandbox Code Playgroud)

我得到以下结果:

1   {"eventid":"1","eventversion":"1.0","image":{"id":"101","message":"New item!"},"eventsource":"aws:dynamodb","eventname":"INSERT","awsregion":"us-west-2"}   {"eventid":"2","eventversion":"1.0","image":{"id":"101","message":"This item has changed"},"eventsource":"aws:dynamodb","eventname":"MODIFY","awsregion":"us-west-2"}   {"eventid":"3","eventversion":"1.0","image":{"id":"101","message":"This item has changed"},"eventsource":"aws:dynamodb","eventname":"REMOVE","awsregion":"us-west-2"}   
Run Code Online (Sandbox Code Playgroud)

json文件的全部内容在此处作为一个条目被选中.

如何将json文件的每个元素作为一个条目读取?

编辑:如何读取图像的每个子列,即地图的每个元素?

谢谢.

sql json amazon-web-services amazon-athena

11
推荐指数
1
解决办法
3455
查看次数

标签 统计

amazon-athena ×1

amazon-web-services ×1

json ×1

sql ×1