Amazon redshift 如何在redshift上对嵌套json数据建模以查询特定属性

Amazon redshift 如何在redshift上对嵌套json数据建模以查询特定属性,amazon-redshift,Amazon Redshift,我在S3上有以下JSON文件结构: { "userId": "1234", "levelA": { "LevelB": [ { "bssid": "University", "timestamp": "153301355685" }, { "bssid": "Mall", "timestamp": "153301355688" } ] } } 现在,我们未

我在S3上有以下JSON文件结构:

{
  "userId": "1234",
  "levelA": {
    "LevelB": [
      {
        "bssid": "University",
        "timestamp": "153301355685"
      },
      {
        "bssid": "Mall",
        "timestamp": "153301355688"
      }
    ]
  }
}
现在,我们未来的一个问题是:

返回看到bssid=大学的用户总数

所以在我的例子中,它将返回1(因为userId=1234包含bssid的值)


对于这种类型的查询,红移是正确的解决方案吗?在这种情况下,如何对其建模?

建模的最简单方法是为
userId
bssd
的每个组合创建一个表,其中一行:

userId, bssid, timestamp
1234,University,153301355685
1234,Mall,153301355688
困难的部分是将JSON(包含在多个文件中)转换为适合红移的格式

虽然Amazon Redshift可以,但它不会处理嵌套数据中的一对多关系

AmazonRedshift也有一个可以从JSON字符串中提取数据的函数,但它同样不能处理数据中的一对多关系

我建议在加载到红移之前,将数据转换为上述格式。这需要使用外部脚本或ETL工具来完成

如果您经常生成这样的文件,一个合适的方法是每当这些文件中的一个存储在Amazon S3存储桶中时触发一个AWS Lambda函数。Lambda函数随后将解析文件并输出CSV格式,准备加载到红移中