我们有一个Amazon桶,它包含大约100万个S3文件,每个文件都压缩了大约500 an。这些文件是放在那里的AWS动态消防软管,和一个新的一个是写每5分钟。这些文件都描述类似的事件,因此在逻辑上都是相同的,并且都是有效的JSON,但是具有不同的结构/层次结构。它们的格式&行尾也是不一致的:一些对象位于单行上,有些位于多行上,有时一个对象的结尾与另一个对象的开始(即}{
)位于同一行。
我们需要解析/查询/分解这些对象,然后将结果导入我们的内部数据仓库SQL Server数据库。
亚马逊雅典娜无法处理不一致的间距/结构。我想要创建一个Lambda函数来清理间距,但这仍然留下了不同结构的问题。由于这些文件是由Kinesis建立的,这迫使您将文件按年、月、日和小时嵌套在文件夹中,因此我们必须每年创建数千个分区。雅典娜分区数量的限制并不为人所知,但研究表明,如果我们每小时创建一个分区,我们很快就会用尽这个限制。
我看过先把数据注入Redshift,然后再把它拉下来。外部表可以处理间距问题,但不能处理嵌套JSON,几乎所有这些文件都有嵌套JSON。COPY
命令可以处理嵌套的JSON,但要求我们事先了解JSON结构,并且不允许我们访问文件名,这是完全导入所需的(这是获取日期的唯一方法)。通常,Redshift与Athena有相同的问题:不一致的结构使得很难定义模式。
我已经研究过使用像AWS Glue这样的工具,但是它们只是移动数据,它们不能将数据移动到我们的内部服务器中,所以我们必须找到某种中介,这会增加成本、延迟和维护开销。
我尝试删除中间人,并使用ZappySys的S3 JSON任务直接提取文件并将其聚合到SSIS包中,但它无法处理间距问题或不一致的结构。
我不可能是第一个面对这个问题的人,但我只是不停地转。
发布于 2018-05-09 07:11:18
我可能会提出两种解决方案
除非JSON的格式是正确的,否则没有任何工具能够完美地处理它,我相信比雅典娜或谱更合适,MongoDB/DyanoDB/Cassandra将适合这个用例
如果您能够分享您在创建大量分区时所面临的限制,那就太好了?
发布于 2019-10-22 14:06:49
隆隆声是一个开放源码(Apache2.0)引擎,允许您使用JSONiq查询语言直接查询存储在S3上的JSON (特别是JSON线文件),而不必将其移动到任何其他地方或将其导入任何数据存储。在内部,它使用星火和DataFrames。
它成功地在超过200亿个对象(10+ TB)的集合上进行了测试,如果数据是嵌套的和异构的(缺少字段、额外字段、同一字段中的不同类型等),它也可以无缝工作。它还在亚马逊电子病历集群中进行了测试。
更新:雷布尔也适用于Parquet、CSV、ROOT、AVRO、text和SVM,以及HDFS、S3和Azure。
https://stackoverflow.com/questions/50243011
复制相似问题