数据摄取:将动态文件从S3加载到Snowflake

2024-09-27 22:33:31 发布

您现在位置:Python中文网/ 问答频道 /正文

情况:csv每月登陆AWS S3。供应商可以根据需要从文件中添加/删除/修改列。因此,该模式在时间上是未知的。要求是在雪花中动态创建一个表,并将数据加载到所述表中。Matillion是我们的英语教学工具

这就是我到目前为止所做的

  1. 设置Lambda以检测文件的到达,将其转换为JSON,上载到另一个S3目录,并将文件名添加到SQS
  2. Matillion检测SQS消息并将包含JSON数据的文件加载到SF表的Variant列中
  3. SF Stored proc接受variant列,并根据JSON数据中的字段数生成一个表。SF中的VARIANT列只有在其JSON数据可用时才能以这种方式工作。很遗憾,CSV不受支持

这适用于10000行。当我用一个超过1GB的完整文件(超过10M行)运行这个程序时,问题就出现了。它在运行时由于磁盘空间不足错误而使lambda作业崩溃

到目前为止,我已经想到了以下几种选择:

  1. 在上传到S3之前,将EFS卷附加到lambda并使用它存储JSON文件。JSON数据文件比CSV文件大得多,我预计JSON文件大约为10-20GB,因为该文件有超过10M行
  2. Matillion有一个Excel查询组件,它可以在其中获取标题并动态创建表并加载文件。我想我可以将CSV中的头行转换为Lambda中的XLX文件,将其传递给Matillion,让它创建结构,然后在创建结构后加载CSV文件

我的其他选择是什么?考虑因素包括:用于未来大型CSV或类似需求的良好可重复设计模式、EFS的成本、我是否充分利用了我可用的工具?谢谢


Tags: 文件工具csv数据lambdajsons3情况
3条回答

为什么不将初始csv文件拆分为多个文件,然后以与当前相同的方式处理每个文件

为什么要将CSV转换为JSON;CSV直接加载到表中,无需进行JSON所需的任何数据转换,横向扁平化可将JSON转换为关系数据行;为什么不使用Snowflake Snowpipe功能直接将数据加载到Snowflake中而不使用Matallion呢。在加载到Snowflake之前,您可以将大型csv文件拆分为较小的块;这将有助于在SF仓库之间分配数据处理负载

我还使用Matillion将CSV文件从SFTP加载到Snowflake中,对模式一无所知

在我的过程中,我在Snowflake中创建了一个“temp”表,其中包含50个VARCHAR列(我们的文件不应该超过50列)。我们的数据总是包含文本、日期或数字,所以VARCHAR不是问题。然后我可以将.csv文件加载到临时表中。我相信这也适用于来自S3的文件

这至少会让数据变成雪花。但是,考虑到您的场景,我不确定如何创建“最终”表。 我可以想象能够使用标题行,和/或对每个列中包含的数据的“类型”进行一些分析,以确定所需的列类型

但是,如果您可以创建“最终”表,那么您可以将数据从临时表移到临时表。或者改变临时表本身

相关问题 更多 >

    热门问题