Как использовать командную консоль AWS Dataprepremand - PullRequest
0 голосов
/ 29 мая 2018

Мой первый вопрос здесь!Я построил конвейер данных для ежедневного 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 голосов
/ 29 мая 2018

Правильно, прошло несколько часов, и я наконец решил это.Было несколько проблем, удерживавших меня.

  1. Клиент Mysql не был установлен на экземпляре ec2.Решил, что добавив команду установки
  2. Следующая проблема заключалась в том, что строка 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
...