创建雅典娜表lambda函数的Node.js
我试图创建拉姆达(node.js中)的功能将在雅典娜创建一个表。
我跟着“开始查询执行” AWS文档(代码附后),但是当我运行代码,我没有看到正在创建的任何表并没有错误从功能...
会很感激的帮助:
- 难道拉姆达将创建一个表(就像一个查询)?
- 它是重要的,这两个lambda函数和雅典娜区域将是相同的?
- 这有什么错的代码?
- 我应该使用
.promise()
或try & catch
?
我曾尝试在不同的区域中运行它,并让LAMBDA完全访问都雅典娜和S3
// console.log('Loading function');
const AWS = require('aws-sdk');
AWS.config.update({region: 'eu-west-1'});
exports.handler = async (event, context, callback) => {
var athena = new AWS.Athena();
var params = {
"QueryExecutionContext": {
"Database": "mydatabase"
},
"QueryString": "CREATE TABLE table_test AS SELECT * FROM mydatabase.exsistingtable WHERE time > to_iso8601(current_timestamp - interval '1' day);",
"ResultConfiguration": {
"EncryptionConfiguration": {
"EncryptionOption": "SSE-S3" },
"OutputLocation": "s3://aws-athena-query-results-maybucket-eu-west-1/"
}
};
athena.startQueryExecution(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
console.log("end script");
return "";
};
这里是我的IAM政策:
- AmazonS3FullAccess
- CloudWatchFullAccess
- AmazonAthenaFullAccess
- CloudWatchLogsFullAccess
- CloudWatchEventsFullAccess
既然你是从查询结果创建表的查询首先需要在创建表之前运行。该StartQueryExecution
API只启动一个查询时,查询然后异步运行,你将不得不问雅典娜定期使用GetQueryExecution
无论是做或不该。
查询可以可能花费大量的时间来运行,CTAS操作(CREATE TABLE AS),需要更长的时间。你不想来运行你的lambda函数,而雅典娜工作,这只会花费你的钱,如果查询比对功能的超时时间运行它甚至不会工作。
你可以开始在lambda函数像你这样的查询执行,但如果你想等待查询完成,该表中创建你需要以某种方式直到GetQueryExecution
表示该查询完成定期运行的代码。
这可以通过例如阶跃函数来完成,你可以有一个lambda函数启动查询,另一种为完成被称为一遍又一遍投票,而包东西,比如最终的lambda函数。有步骤的功能好的模板,这种工艺。