Dan*_*lan 9 javascript typescript aws-sdk amazon-athena aws-sdk-js
我正在使用 typescript 和 aws-sdk 编写一个节点应用程序来调用 Athena。有时,对 Athena 的调用会在等待 Athena 响应一分钟后超时。我不明白的是,如果我转到 AWS 控制台并查看 Athena History 选项卡,它说我的查询需要 4 秒才能成功,但在我的代码中,它运行了超过一分钟等待响应。我希望我的代码中有什么地方做错了。
myFunct... {
const athena = getAthena();
const startQueryExecutionResponse: StartQueryExecutionOutput = await athena.startQueryExecution(params).promise();
let status = "UNKNOWN";
do {
await sleep(1000);
status = await getQueryStatus(athena, startQueryExecutionResponse);
} while (status === "QUEUED" || status === "RUNNING");
return await athena.getQueryResults(startQueryExecutionResponse as GetQueryResultsInput).promise();
};
const sleep = (ms: number) => {
return new Promise(resolve => {
setTimeout(resolve, ms)
})
};
const getQueryStatus = async (athena: AWS.Athena, startQueryExecutionResponse: Athena.StartQueryExecutionOutput): Promise<QueryExecutionState> => {
const result: GetQueryExecutionOutput = await athena.getQueryExecution(startQueryExecutionResponse as GetQueryResultsInput).promise();
console.log(result);
return result!.QueryExecution!.Status!.State || "Unknown"
};
Run Code Online (Sandbox Code Playgroud)
代码卡在那个 while 循环中,我可以从下面的 console.log 中看到,状态Status: { State: 'RUNNING', SubmissionDateTime: 2019-07-23T18:28:00.639Z },一遍又一遍。
如果 AWS 控制台说这个查询需要 4 秒才能完成,为什么 getQueryExecution 响应说它仍在运行几分钟?
可以获得函数的QueryExecutionStatisticsgetQueryExecution。
"DataManifestLocation": "string",
"DataScannedInBytes": number,
"EngineExecutionTimeInMillis": number,
"QueryPlanningTimeInMillis": number,
"QueryQueueTimeInMillis": number,
"ServiceProcessingTimeInMillis": number,
"TotalExecutionTimeInMillis": number
Run Code Online (Sandbox Code Playgroud)
如果您还没有检查过的话,这可能会给您带来更多的见解。4 秒可能是总执行时间的子集。也许您的查询在计划上花费了更多时间,而不是在执行上。
EngineExecutionTimeInMillis 执行查询所花费的毫秒数。
类型:长
必需: 否
QueryPlanningTimeInMillis Athena 规划查询处理流程所花费的毫秒数。这包括从数据源检索表分区所花费的时间。请注意,由于查询引擎执行查询计划,因此查询计划时间是引擎处理时间的子集。
类型:长
必需: 否
| 归档时间: |
|
| 查看次数: |
1618 次 |
| 最近记录: |