尝试压缩具有两个地图/字典字段(custom_event1和custom_event2)的输入JSON数据,该字段可能包含任何键值对数据。为了从数据框创建输出表,必须避免将custom_events展平并将其作为JSON字符串存储在列中。
关注this doc,Relationalize.apply也会展平custom_events映射。
Sample JSON:
{
"id": "sklfsdfskdlfsdfsdfkhsdfssdf",
"idtype": "cookieId",
"event": "install",
"sub_event": null,
"ip": "XXXXXX",
"geo": {
"country": "IN",
"city": null,
"region": null
},
"carrier": {
"operator": null,
"network": null,
"connection_type": null
},
"user_agent": "Mozilla/5.0",
"device": {
"brand": "LYF",
"model": null,
"type": null
},
"package": {
"pkgName": "XXXXXXXX",
"pkgVersion": "1.5.6.3",
"pkgRating": null,
"timestamp": "2017-12-14 11:51:27"
},
"custom_event1": {
"key1": "value1",
"key2": "value2"
},
"custom_event2": {
"key": "value"
}
}
如何在Relational存储中使用动态地图字段存储JSON数据?
答案 0 :(得分:0)
假设JSON数据位于S3中,则需要执行的步骤
在AWS Glue中创建一个Crawler,并使其在目录(数据库)中创建一个架构。假设您对AWS Glue有点熟悉。
创建一个Glue作业,该作业将json转换为您喜欢的格式(parqet),该格式使用transform步骤通过Rationalize类来平整数据-https://aws.amazon.com/blogs/big-data/simplify-querying-nested-json-with-the-aws-glue-renationalize-transform/ 并以parqet格式写入
为新的展平数据创建搜寻器,并在AWS胶水中创建表
使用Athena或AWS QuickSight或您最喜欢的BI工具来查询Parqet数据
答案 1 :(得分:0)
我遇到了类似的问题,并根据this文档为JSON文件创建了分类器。
执行搜寻器时,我添加了分类器,并且像魔术一样,所有JSON结构都位于关系模型中,并存储在Redshift集群数据库中。