Airflow XCom在模板内发送变量

时间:2017-10-02 22:28:29

标签: bash templating airflow apache-airflow airbnb

我一直在尝试在bash脚本中将变量的内容发送到Xcom。但是,我没有成功。

test_bash = """
export test_val='123'
{{ ti.xcom_push(key='1',value=test_val) }}
echo $test_val
"""

bash_tash = BashOperator(
    task_id='test',
    bash_command=test_bash,
    retries=3,
    dag=dag)

在上面的代码中。当我试图拉它。我无法向Xcom发送任何内容。我尝试用单引号发送文本,但它运行正常。

有没有办法将变量从bash脚本发送到xcom?

由于

1 个答案:

答案 0 :(得分:2)

您可以使用BashOperator以不同方式执行此操作:

var qsToObj = function(qs) {
  qs = qs.substring(1);
  if (!qs) return {};    
  return qs.split("&").reduce(function(prev, curr, i, arr) {
    var p = curr.split("=");
    prev[decodeURIComponent(p[0])] = decodeURIComponent(p[1]);
    return prev;
  }, {});
}

var qs = '?'; // window.location.search;
var obj = qsToObj(qs);
delete obj.state;
console.log(obj);

var newQs = $.param(obj);
console.log(newQs);

task instance > XCom

然后你把价值拉进另一个任务。