You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Step Functions状态机中将字符串列表转为逗号分隔字符串

实现场景
  • 编写Step Functions状态机,完成「Lambda拉取表名 → 触发Glue作业运行」的逻辑
  • stage#1阶段:调用Lambda动态获取指定Glue数据库下的全量表清单
  • 后续阶段:将获取到的所有表名转为逗号分隔的字符串格式,作为参数传入Glue作业
当前状态机定义
StartAt: GetTables

GetTables:
  Type: Task
  Resource: ${get_tables_lambda_arn}
  Parameters:
    DatabaseName: ${source_glue_database_name}
  ResultSelector:
    SourceTables.$: $.tables
  ResultPath: $.Variables
  Next: RunJob

RunJob:
  Type: Task
  Resource: arn:aws:states:::glue:startJobRun.sync
  Parameters:
    JobName: ${glue_job_name}
    Arguments:
      "--destination_path": ${destination_path}
      "--run_date_iso_8601.$": $$.Execution.StartTime
      "--source_database": ${source_glue_database_name}
      "--source_tables.$": $.Variables.SourceTables
  ResultPath: null
  Next: Finish
现存问题

Glue作业的--source_tables参数预期接收table1,table2,table3格式的逗号分隔字符串,但当前状态机直接传入的是Lambda返回的["table1","table2"]格式数组,参数格式不匹配。

解决方法

直接用Step Functions原生内置的States.ArrayJoin函数就能在状态机内部完成格式转换,完全不需要新增Lambda或者其他中间处理节点。
只需要修改RunJob节点里--source_tables的赋值逻辑,把原来直接引用数组的写法替换为内置函数调用即可:

"--source_tables.$": "States.ArrayJoin($.Variables.SourceTables, ',')"

这个函数的作用就是把输入数组的所有元素,用指定的第二个参数作为分隔符拼接成字符串,这里传逗号作为分隔符,输出结果正好是Glue作业需要的逗号分隔表名字符串格式。该函数目前在所有Step Functions工作流类型中都可直接使用,不需要额外调整运行时配置。

内容的提问来源于stack exchange,提问作者Sachin Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 03:49:12