Sql server 如何在S3中查询异构JSON数据?
我们有一个AmazonS3存储桶,其中包含大约一百万个JSON文件,每个文件大约压缩500KB。这些文件由AWS Kinesis Firehose放在那里,每5分钟写入一个新文件。这些文件都描述了类似的事件,因此在逻辑上都是相同的,都是有效的JSON,但具有不同的结构/层次结构。此外,它们的格式和行尾不一致:一些对象在一行上,一些在多行上,有时一个对象的结尾与另一个对象的开头在同一行上(即,Sql server 如何在S3中查询异构JSON数据?,sql-server,amazon-s3,amazon-redshift,amazon-athena,Sql Server,Amazon S3,Amazon Redshift,Amazon Athena,我们有一个AmazonS3存储桶,其中包含大约一百万个JSON文件,每个文件大约压缩500KB。这些文件由AWS Kinesis Firehose放在那里,每5分钟写入一个新文件。这些文件都描述了类似的事件,因此在逻辑上都是相同的,都是有效的JSON,但具有不同的结构/层次结构。此外,它们的格式和行尾不一致:一些对象在一行上,一些在多行上,有时一个对象的结尾与另一个对象的开头在同一行上(即,}{) 我们需要解析/查询/分解这些对象,然后将结果导入本地数据仓库SQL Server数据库 Amazo
}{
)
我们需要解析/查询/分解这些对象,然后将结果导入本地数据仓库SQL Server数据库
Amazon Athena无法处理不一致的间距/结构。我曾想过创建一个Lambda函数来清理间距,但这仍然留下了不同结构的问题。由于文件由Kinesis放置,这迫使您将文件放入按年、月、日和小时嵌套的文件夹中,因此我们必须创建每年有数千个分区。雅典娜的分区数量限制尚不清楚,但研究表明,如果我们每小时创建一个分区,我们将很快耗尽这个限制
我已经研究过先将数据注入Redshift,然后再将其向下拉。Amazon Redshift外部表可以处理间距问题,但不能处理嵌套JSON,这几乎所有这些文件都有。COPY
命令可以处理嵌套JSON,但要求我们事先知道JSON结构,并且不允许我们访问ss文件名,我们需要它来完成导入(这是我们获取日期的唯一方法)。一般来说,红移与雅典娜有相同的问题:不一致的结构使得定义模式变得困难
我研究过使用AWS Glue之类的工具,但它们只是移动数据,不能将数据移动到我们的内部部署服务器中,因此我们必须找到某种中介,这会增加成本、延迟和维护开销
我尝试过省去中间人,使用ZappySys的S3JSON SSIS任务直接提取文件并将其聚合到SSIS包中,但它无法处理间距问题或不一致的结构
我不可能是第一个面对这个问题的人,但我只是不断地旋转轮子。我可能会建议两种解决方案
更新:Rumble还适用于拼花地板、CSV、ROOT、AVRO、text和SVM,以及HDFS、S3和Azure。为什么要首先向Kinesis消防软管发送不一致的数据?您能将数据发送到几个不同的消防软管,以便每个消防软管接收一致的数据,然后您可以查询这些数据吗?@JohnRotenstein我不反对l数据进入S3。我正在与客户端合作,以使数据更加一致,但这将是一个不断变化的目标,仍然留给我如何处理现有数据的问题。我更新了问题,以澄清分区和格式。我正在使用MongoDB进行我需要的转换,它工作得很好。谢谢s!谢谢,很高兴听到。Mongo有设置集群的麻烦。如果您在AWS中,请尝试使用DynamoDB,这样您就不需要维护任何infra;但是DynamoDB没有Mongo支持的所有功能(嵌入式数据结构)并且具有更好的可扩展性和易维护性。该公司已经使用Mongo作为一项服务,因此我可以借助它。