【发布时间】:2022-11-27 10:02:35
【问题描述】:
我有一个运行 Athena 查询的工作代码,并使用以下代码通过轮询 error 从 GetQueryResults 返回来等待查询完成:
func GetQueryResults(client *athena.Client, QueryID *string) []types.Row {
params := &athena.GetQueryResultsInput{
QueryExecutionId: QueryID,
}
data, err := client.GetQueryResults(context.TODO(), params)
for err != nil {
println(err.Error())
time.Sleep(time.Second)
data, err = client.GetQueryResults(context.TODO(), params)
}
return data.ResultSet.Rows
}
问题是万一查询失败,我绝对没有办法打破循环。
例如,在 Python 中我可以这样做:
while athena.get_query_execution(QueryExecutionId=execution_id)["QueryExecution"][
"Status"
]["State"] in ["RUNNING", "QUEUED"]:
sleep(2)
我可以在 for 循环中进行类似 strings.Contains(err.Error(),"FAILED") 的检查,但我正在寻找一种更简洁的方法。
我尝试寻找 Go 的等价物,但没有成功。 Go SDK 有返回执行状态的函数吗?有没有更好的方法来进一步检查 Go 中的错误而不是 err != nil?
【问题讨论】:
标签: amazon-web-services go aws-sdk amazon-athena aws-sdk-go