如何使用 AWS 数据管道 shellcommandprecondition

How to use AWS Data pipeline shellcommandprecondition

我的第一个问题在这里!我为日常 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. Mysql 客户端未安装在 ec2 实例上。通过添加安装命令
  2. 解决了这个问题
  3. 下一个问题是 if $count = 0 行无法正常工作,因为我的经验有限。将其交换为 if [ "$count" -eq "0" ];

最终和工作代码是:

#!/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