微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Step Functions - 在后面的步骤中使用旧步骤的输出非顺序

如何解决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
      }
   }
}

enter image description here

第三步输入: enter image description here

,

我发现,我需要做的就是在第 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 举报,一经查实,本站将立刻删除。