如何解决Step Functions - 在后面的步骤中使用旧步骤的输出非顺序
在具有 3 个步骤的状态机中,步骤 3 是否可以使用步骤 1 的输出?在我的特定场景中,我有:
Task -> Map State -> Task
我对使用 Map State 的第一次迭代的输入作为第 3 步的输入特别感兴趣。我可以处理地图状态的整个输入,但到目前为止我不知道如何实现其中任何一个。
解决方法
"ResultPath":"$.mapOutput"
将作为地图输出的前缀 mapOutput
。并且组合的输入和输出将作为输入发送到以下任务。
这是第 3 步的输入:
{
"Comment": "Insert your JSON here","inputForMap": [
"iter 1","iter2"
],"mapOutput": [
"iter 1","iter2"
]
}
这里是完整的定义
{
"StartAt":"Dummy Step 1 Output","States":{
"Dummy Step 1 Output":{
"Type":"Pass","Result":[
"iter 1","iter2"
],"ResultPath":"$.inputForMap","Next":"loop on map"
},"loop on map":{
"Type":"Map","ResultPath":"$.mapOutput","Next":"Step three","Iterator":{
"StartAt":"Step 2 - Looping on map","States":{
"Step 2 - Looping on map":{
"Type":"Pass","End":true
}
}
},"ItemsPath":"$.inputForMap","MaxConcurrency":1
},"Step three":{
"Type":"Pass","Next":"End of Step Function"
},"End of Step Function":{
"Type":"Pass","End":true
}
}
}
,
我发现,我需要做的就是在第 2 步设置 ResultPath: null
,它会直接传递输入
如果要丢弃输出,则需要使用#refresh portfolio stats
@app.route('/refresh',methods = ['GET','POST'])
def refresh():
if request.method == 'POST':
database = "data.sqlite"
connection = sql.connect(database)
query = ''' UPDATE
portfolio_table
SET
portfolio_cost_total = (SELECT SUM(product_cost_total)
FROM product_table)
WHERE
portfolio_table.portfolio_id = '1' '''
cursor = connection.cursor()
cursor.execute(query,(database,))
db.session.commit()
#df = pd.read_sql_query(query,connection)
#df.head()
return redirect(url_for('index'))
,这样会保持原始输入不变(您可以查看有关ResultPath here 的更多详细信息)。考虑到 ResultPath: null
的默认值是 ResultPath
,这意味着状态将用步骤的结果覆盖整个上下文,这就是您丢失状态机中所有先前上下文的原因。
如果您需要工作流程中第 2 步的结果,另一种解决方案是将结果写入新节点,如 Balu Vyamajala 在他的回答中解释的那样。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。