我在S3上有以下JSON文件结构:
{
"userId": "1234",
"levelA": {
"LevelB": [
{
"bssid": "University",
"timestamp": "153301355685"
},
{
"bssid": "Mall",
"timestamp": "153301355688"
}
]
}
}
现在我们未来的一个查询是:
返回看到bssid = University
的用户总数所以在我的情况下,它将返回1(因为userId = 1234包含bssid的值)
对于这种类型的查询,Redshift对我来说是正确的解决方案吗?如果是这样的话,我该如何建模呢?
答案 0 :(得分:2)
对此进行建模的最简单方法是为userId
和bssd
的每个组合创建一个包含一行的表格:
userId, bssid, timestamp
1234,University,153301355685
1234,Mall,153301355688
困难的部分是将您的JSON(包含在多个文件中)转换为适合Redshift的格式。
虽然Amazon Redshift可以import data in JSON format,但它无法处理嵌套数据中的一对多关系。
Amazon Redshift还有一个JSON_EXTRACT_PATH_TEXT Function可以从JSON字符串中提取数据,但它也不会处理数据中的一对多关系。
在加载到Redshift之前,我建议将数据转换为为上述格式。这需要使用外部脚本或ETL工具完成。
如果您经常生成此类文件,只要其中一个文件存储在Amazon S3存储桶中,一种合适的方法就是触发 AWS Lambda函数。 Lambda函数然后将解析文件并输出CSV格式,准备加载到Redshift。