如何使用 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"
},
我的编码经验很少,所以我可能完全不了解...
对了,几个小时过去了,终于解决了。有几个问题阻碍了我。
- Mysql 客户端未安装在 ec2 实例上。通过添加安装命令
解决了这个问题
- 下一个问题是 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
我的第一个问题在这里!我为日常 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"
},
我的编码经验很少,所以我可能完全不了解...
对了,几个小时过去了,终于解决了。有几个问题阻碍了我。
- Mysql 客户端未安装在 ec2 实例上。通过添加安装命令 解决了这个问题
- 下一个问题是 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