我有大约 500 万个 JSON 文件,总共大约 50GB。它们没有一致的架构(它们的格式大致相同,但有些有额外的扩展字段,有些缺少字段等 - 架构非常复杂地嵌套)。
我想在这些文件中运行类似 SQL 的查询 - 例如查找具有特定属性的文件数,查找属性在数字或时间范围内的文件数等。
我在本地和 S3 存储桶中有文件。理想情况下,我希望将数据存储在云中,以便其他人可以对它们运行查询,而不必在本地拥有文件。
我有哪些选择?以下是我迄今为止评估过的一些解决方案:
- 阿帕奇钻。
- 优点:非常适合类似 SQL 的查询和“发现时”模式。
- 缺点:被排除在外,因为它在本地(内存不足)和连接到 S3 (我认为因为它必须获取数据的本地副本)上都很难处理这种大小的数据集。
- 谷歌大查询。
- 优点:非常适合类似 SQL 的查询、云中的存储、大型数据集以及友好的用户界面。JSON 可以从命令行加载。
- 缺点:我需要定义一个模式,并删除或填充任何不符合它的数据。这是一个麻烦,也是一个问题,因为这意味着我不能查询一些我想要的数据(例如扩展字段)。
- 亚马逊雅典娜。
- 优点:云支持(针对 S3 运行),并且(我认为)具有类似 SQL 的查询。
- 缺点:似乎需要定义的架构(您在运行时定义的架构,而不是提前定义的架构)?似乎还需要查询中的文件来匹配架构,这对我的数据不起作用。但是,我不确定这是否正确,因为文档非常混乱。
- 谷歌云数据存储。
- 优点:使用 GQL 的类似 SQL 的查询,存储在云中。NoSQL,所以无模式。
- 缺点:似乎需要预定义的索引才能运行查询(?),有限的查询支持(例如没有聚合或连接)。没有关于如何将 JSON 文件加载到其中的文档(可能需要 Cloud Dataflow 设置)。
我倾向于 BigQuery,主要是因为它比任何其他解决方案都更容易启动和运行。但是,对预定义模式的要求是一个主要的麻烦。
有没有我错过的解决方案?我是否误解了 Athena 对模式的要求?