如何使用AWS Data管道shellcommandprecondition

时间:2018-05-29 08:06:57

标签: amazon-web-services amazon-data-pipeline

我的第一个问题!我为日常ETL构建了一个数据管道,它可以在Aurora,Redshift和Hive之间移动和转换数据。一切正常,但我真的坚持尝试实现 Shellcommandprecondition 。目的是检查位于Aurora MySQL上的视图中的总行数。如果视图为空(0行),则应执行数据管道。如果视图中有行 - 那么管道稍稍等待,然后在4次重试后最终失败。

有人可以帮我解决实际检查和查询的代码吗?这是我到目前为止所得到的,但没有运气:

#!/bin/bash
count=`mysql -u USER -pPW -h MASTERPUBLIC -p 3306 -D DBNAME -s -N -e "SELECT count(*) from MyView"`
if $count = 0 
then exit 0 
else exit 1
fi

在管道定义中,它看起来如下:

 {
      "retryDelay": "15 Minutes",
      "scriptUri": "s3://mybucket/ETLprecondition.bash",
      "maximumRetries": "4",
      "name": "CheckViewEmpty",
      "id": "PreconditionId_pznm2",
      "type": "ShellCommandPrecondition"
    },

我的编码经验很少,所以我可能完全没有...

1 个答案:

答案 0 :(得分:0)

是的,几个小时过去了,我终于解决了。有一些问题阻碍了我。

  1. ec2客户端未安装在ec2实例上。通过添加安装命令
  2. 解决了这个问题
  3. 下一个问题是if $ count = 0行并没有正常工作,正如我原本预期的那样,我的经验有限。如果[" $ count" -eq" 0" ];
  4. 最终和工作代码是:

    #!/bin/bash
    if type mysql >/dev/null 2>&1; then
    count=`mysql -u USER -pPW -h MASTERPUBLIC -p 3306 -D DBNAME -s -N -e "SELECT count(*) from MyView"`
    if [ "$count" -eq "0" ];
    then exit 0
    else exit 1
    fi
    else
    sudo yum install -y mysql
    count=`mysql -u USER -pPW -h MASTERPUBLIC -p 3306 -D DBNAME -s -N -e "SELECT count(*) from MyView"`
    if [ "$count" -eq "0" ];
    then exit 0
    else exit 1
    fi
    fi