Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 当s3 bucket中的对象更新时,如何调用lambda自动触发的athena?_Amazon Web Services_Amazon S3_Aws Lambda_Amazon Athena - Fatal编程技术网

Amazon web services 当s3 bucket中的对象更新时,如何调用lambda自动触发的athena?

Amazon web services 当s3 bucket中的对象更新时,如何调用lambda自动触发的athena?,amazon-web-services,amazon-s3,aws-lambda,amazon-athena,Amazon Web Services,Amazon S3,Aws Lambda,Amazon Athena,我有以下两个用例应用于此 案例1。我需要单独调用lambda来调用athena来对s3数据执行查询?问题:如何通过api单独调用lambda 案例2。每当文件复制到已经映射到athena的同一s3存储桶时,我需要lambda函数来调用athena Iam参考下面的链接,以同样的方式在雅典娜上执行Lambda操作 链接: 对于案例2:以下是您想要集成的示例: s3-1中的文件是sales.csv,我将通过复制其他s3-2中的数据来更新销售详细信息。s3-1数据中定义的模式/列将保持不变。 因此,

我有以下两个用例应用于此

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

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

Iam参考下面的链接,以同样的方式在雅典娜上执行Lambda操作

链接:

对于案例2:以下是您想要集成的示例:

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

是否能提供更好的方法来实现上述情况


谢谢

下一步是为您的lambda创建一个端点,您可以使用aws apigateway来实现这一点


另一方面,使用amazon控制台或amazon cli,您可以调用lambda进行测试。

案例1

可以通过命令直接调用AWS Lambda。这可以通过或通过使用AWS SDK的编程语言完成

案例2

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

Lambda函数可以从
事件
记录中提取这些细节,然后在Amazon Athena命令中使用这些信息

请注意,如果每次文件名都不同,则在
SELECT
命令可以查询数据之前,需要使用
CREATE TABLE
命令

一般性评论

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


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

欢迎使用StackOverflow!“自定义列表中的任何事件”是什么意思?如何调用Lambda函数?它似乎正在从传入事件中检索
名称
,并在Athena查询中使用该名称。你到底想实现什么?嗨@JohnRotenstein我想实现的是,如果我们更新已经映射到雅典娜数据库的相同s3 buck中的数据,如何使用lambda自动调用雅典娜查询?如果我的用例在这种情况下逻辑上无法应用,请纠正我。因此,您的用例似乎是:当文件添加到Amazon S3存储桶时,使用Amazon S3事件触发Lambda函数。Lambda函数随后将调用Athena对上载的数据文件执行查询。对吗?问题:文件是否始终是同一个文件,或者可能有不同的名称?我这样问是因为雅典娜在运行查询之前需要一个
CREATE TABLE
。另外,它将只查询一个文件,还是查询一个目录中的多个文件?请随意编辑您的问题,以提供更多详细信息。@JohnRotenstein我已编辑了我想实现的两个案例的问题。请让我知道,如果清楚提供解决方案?谢谢