В настоящее время у меня есть последовательная работа в DataStage.
Вот поток:
StartLoop Activity --> UserVariables Activity --> Job Activity --> Execute Command --> Endloop Activity
Для получения реальных данных задание будет выполняться каждые 30 минут (с 8:00 до 20:00). Первая итерация цикла загрузит данные с 20:00 предыдущего дня до 8:00 текущего дня, а остальные загрузят данные за последние 30 минут.
Действие UserVariables заключается в передаче переменных (оператор SQL) для фильтрации данных, получаемых в Activity Activity. На первой итерации переменные пользователя передают переменную A (оператор SQL 1) в действие задания, а со второй итерации переменная B (оператор SQL 2) передается в действие задания.
Команда «Выполнить» В настоящее время я установил команду «Sleep 1800» для задания на 30 минут, чтобы завершить итерацию цикла. Но теперь я понял, что на это влияет время работы каждой итерации. Итак, ничего не зная о сценарии оболочки, я искал решения и заставлял этот файл спать до определенного времени, например 30 или 00 минут (задержка 0-1 минута, но это нормально).
Сценарий оболочки ниже, я нормально запустил его в своей системе, но безуспешно использовал его как часть работы.
#!/bin/bash
minute=$(date +%M)
num_1=30
num_2=60
if [ $minute -le 30 ];
then
wait=$((($num_1 - $minute)*$num_2))
sleep $wait
fi
if [ $minute -gt 30 ];
then
wait=$((($num_2 - $minute)*$num_2))
sleep $wait
fi
Сейчас у меня две проблемы, с которыми мне нужна ваша помощь.
- Задание отлично выполняет первую итерацию с переменной A ниже:
select * from my_table where created_date between trunc(sysdate-1) + 20/24 and trunc(sysdate) + 8/24;
Но со второй итерации он потерпел неудачу с Job Activity с переменной B ниже:
select * from my_table where created_date between trunc(sysdate-1/48, 'hh') + 30*trunc(to_number(to_char(sysdate-1/48,'MI'))/30)/1440 and trunc(sysdate, 'hh') + 30*trunc(to_number(to_char(sysdate,'MI'))/30)/1440;
В параллельном задании в журнале говорилось:
INPUT,0: The following SQL statement failed: select * from my_table where created_date between trunc(sysdate-1/48, hh) + 30*trunc(to_number(to_char(sysdate-1/48,MI))/30)/1440 and trunc(sysdate, hh) + 30*trunc(to_number(to_char(sysdate,MI))/30)/1440.
Я понял, что, возможно, он не смог запустить параллельное задание, потому что он удалил одинарную кавычку в hh и MI.
Это потому, что при передаче переменных из UserVariables Activity в Job Activity переменная удалит все кавычки? И как я могу это исправить?
2. Как я могу сделать приведенный выше сценарий оболочки как часть задания, например, «Выполнить команду» или какой-либо другой этап. Я искал решения и думаю, что речь идет о ExecSH Before / After Routine Activity. Но, прочитав страницы IBM, я все еще не знаю, с чего начать.
Извините за добавление 2 вопросов к 1 сообщению, что делает его таким длинным, но очень относительным друг к другу, поэтому на ответ уйдет много времени, если я разделю его на 2 сообщения, и вам, ребята, понадобится дополнительная информация об этом.
Спасибо!