【发布时间】:2021-01-26 20:49:12
【问题描述】:
情况:每个月都有一个 csv 登陆 AWS S3。供应商根据需要从文件中添加/删除/修改列。所以架构是不提前知道的。要求是在 Snowflake 中动态创建一个表并将数据加载到所述表中。 Matillion 是我们的 ELT 工具。
这是我到目前为止所做的。
- 设置 Lambda 以检测文件的到达,将其转换为 JSON,上传到另一个 S3 目录并将文件名添加到 SQS。
- Matillion 检测 SQS 消息并将包含 JSON 数据的文件加载到 SF 表的 Variant 列中。
- SF 存储过程采用变量列并根据 JSON 数据中的字段数生成一个表。 SF 中的 VARIANT 列仅在其 JSON 数据时才以这种方式工作。很遗憾,不支持 CSV。
这适用于 10,000 行。当我使用超过 1GB 的完整文件(超过 10M 行)运行它时,就会出现问题。它会在运行时因磁盘空间不足错误而使 lambda 作业崩溃。
这些是我目前想到的替代方案:
- 将 EFS 卷附加到 lambda,并在上传到 S3 之前使用它来存储 JSON 文件。 JSON 数据文件比 CSV 文件大得多,我预计 json 文件大约为 10-20GB,因为该文件有超过 1000 万行。
- Matillion 有一个 Excel 查询组件,它可以在其中获取标题并动态创建表并加载文件。我在想我可以将 CSV 中的标题行转换为 Lambda 中的 XLX 文件,将其传递给 Matillion,让它创建结构,然后在创建结构后加载 csv 文件。
我在这里还有哪些其他选择?考虑因素包括用于未来大型 CSV 或类似需求的良好可重复设计模式、EFS 成本、我是否充分利用了可用的工具?谢谢!!!
【问题讨论】:
-
当您说“供应商添加/修改/删除列”时,您能否详细说明一下,他们是针对所有文件执行此操作还是针对特定文件执行此操作?我想了解架构何时更改,整个数据集都更改了,而不是一些具有不同列号的文件而其他文件仍然具有不同的列号?如果您回答这些问题,很容易提出建议。
标签: python amazon-web-services lambda snowflake-cloud-data-platform matillion