首页 > 解决方案 > 如何在 s3 存储桶中更新对象时调用 lambda 自动触发的雅典娜?

问题描述

我有以下 2 个用例适用于此

案例 1. 我需要单独调用 lambda 来调用 athena 来对 s3 数据执行查询?问题:如何通过api单独调用lambda?

案例 2. 每当一个文件复制到已经映射到 athena 的同一个 s3 存储桶时,我都需要 lambda 函数来调用 athena?

我指的是以下链接以执行相同的操作以在 athena 上执行 Lambda 操作

链接: https ://dev.classmethod.jp/cloud/run-amazon-athenas-query-with-aws-lambda/

对于案例 2:以下是例如想要整合:

s3-1 中的文件是 sales.csv - 我会通过从其他 s3-2 复制数据来更新销售详细信息。s3-1 数据中定义的模式/列将保持不变。所以当我将一些文件复制到映射到 athena 的相同 s3 数据时,lambda 应该调用 athena 来执行查询

欣赏是否可以提供更好的方法来实现上述情况?

谢谢

标签: amazon-web-servicesamazon-s3aws-lambdaamazon-athena

解决方案


情况1

可以通过invoke()命令直接调用 AWS Lambda。这可以通过AWS 命令​​行界面 (CLI)或使用 AWS 开发工具包的编程语言来完成。

案例2

可以在存储桶上配置Amazon S3 事件,以便在上传文件时自动触发 AWS Lambda 函数。该事件向 Lambda 函数提供存储桶名称和文件名(对象名称)。

Lambda 函数可以从记录中提取这些详细信息,event然后可以在 Amazon Athena 命令中使用该信息。

请注意,如果文件名每次都不同,则CREATE TABLE需要一个SELECT命令才能查询数据。

普通的留言

Lambda 函数最多可以运行 15 分钟,因此请确保 Athena 查询不会超过此时间。这不是对 AWS Lambda 函数的特别有效使用,因为它将在函数调用期间计费,即使它只是在等待 Athena 完成。

另一种选择是让 Lambda 函数直接处理文件,假设查询不是特别复杂。例如,Lambda 函数可以将文件下载到临时存储(最大 500MB),通读文件,进行一些计算(例如,将某些列的总数相加),然后将结果存储在某个地方。


推荐阅读