Есть ли способ автоматизировать процесс вакцинации красных смещений через UDF?
У меня более 300+ столов в красном смещении.
Данные обновляются ежедневно, просто хочу знать, могу ли я создать uds в красном смещении, чтобы автоматизировать процесс вакцинации.
Я нашел ссылку автоматизировать с помощью Python, но не тот отличный кодер Python, я так ищу решение в сценарии SQL.
3 ответа
К сожалению, вы не можете использовать udf для чего-то подобного, udf - это простая функция ввода / вывода, предназначенная для использования в запросах.
Лучше всего использовать этот инструмент с открытым исходным кодом от AWS Labs: VaccumAnalyzeUtility. Самое замечательное в использовании этого инструмента заключается в том, что он очень умел VACUUM
на столах, которые нуждаются в них, и он также будет работать ANALYZE
на столах, которые в этом нуждаются.
Это довольно легко настроить как работу cron. Вот пример того, как это можно сделать:
Извлеките репозиторий amazon-redshift-utils в git:
git clone https://github.com/awslabs/amazon-redshift-utils
cd amazon-redshift-utils
Создайте скрипт, который может быть запущен cron. В вашем текстовом редакторе создайте файл с именем run_vacuum_analyze.sh
с помощью следующего и заполните значения для вашей среды:
export REDSHIFT_USER=<your db user name>
export REDSHIFT_PASSWORD=<your db password>
export REDSHIFT_DB=<your db>
export REDSHIFT_HOST=<your redshift host>
export REDSHIFT_PORT=<your redshift port>
export WORKSPACE=$PWD/src/AnalyzeVacuumUtility
#
# VIRTUALENV
#
rm -rf $WORKSPACE/ve1
virtualenv -p python2.6 "$WORKSPACE/ve1"
# enter virutalenv
source $WORKSPACE/ve1/bin/activate
#
# DEPENDENCIES
#
pip install PyGreSQL
cd $WORKSPACE/run
#
# RUN IT
#
python analyze-vacuum-schema.py --db $REDSHIFT_DB --db-user $REDSHIFT_USER --db-pwd $REDSHIFT_PASSWORD --db-port $REDSHIFT_PORT --db-host $REDSHIFT_HOST
Затем создайте задание cron, которое будет запускать этот скрипт (в этом примере я запускаю его ежедневно в 2:30)
chmod +x run_vacuum_analyze.sh
crontab -e
Добавьте следующую запись:
30 2 * * * <path-to-the-cloned-repo>/run_vacuum_analyze.sh
Вы НЕ МОЖЕТЕ использовать UDF для этого, UDF не может выполнить команду, которая обновляет данные.
Теперь вы можете использовать автоматическую вакцину,Redshift теперь предоставляет эту возможность
Да, я создал функцию AWS lamda в java и использовал событие наблюдения за облаком для составления расписания с использованием cron. Функция AWS lamda в java ожидает загрузки затененного jar-файла. Я создал переменную окружения в функции lamda для свойств соединения красного смещения, которые передаются в обработчик Java.
Вот моя служебная программа сценария оболочки, чтобы автоматизировать это с лучшим контролем над фильтрами таблицы.
https://thedataguy.in/automate-redshift-vacuum-analyze-using-shell-script-utility/
Примеры команд:
Запустите вакуум и проанализируйте все таблицы.
./vacuum-analyze-utility.sh -h endpoint -u bhuvi -d dev
Запустите вакуум и проанализируйте схему sc1, sc2.
./vacuum-analyze-utility.sh -h endpoint -u bhuvi -d dev -s 'sc1,sc2'
Запустите FULL для всех таблиц во всей схеме, кроме схемы sc1. Но не хочу анализировать
./vacuum-analyze-utility.sh -h endpoint -u bhuvi -d dev -k sc1 -o FULL -a 0 -v 1
or
./vacuum-analyze-utility.sh -h endpoint -u bhuvi -d dev -k sc1 -o FULL -a 0
Запустите Analyze только для всех таблиц, кроме таблиц tb1, tbl3.
./vacuum-analyze-utility.sh -h endpoint -u bhuvi -d dev -b 'tbl1,tbl3' -a 1 -v 0
or
./vacuum-analyze-utility.sh -h endpoint -u bhuvi -d dev -b 'tbl1,tbl3' -v 0
Используйте пароль в командной строке.
./vacuum-analyze-utility.sh -h endpoint -u bhuvi -d dev -P bhuvipassword
Запустите вакуум и проанализируйте таблицы, где количество несортированных строк превышает 10%.
./vacuum-analyze-utility.sh -h endpoint -u bhuvi -d dev -v 1 -a 1 -x 10
or
./vacuum-analyze-utility.sh -h endpoint -u bhuvi -d dev -x 10
Запустите анализ всех таблиц в схеме sc1, где stats_off больше 5.
./vacuum-analyze-utility.sh -h endpoint -u bhuvi -d dev -v 0 -a 1 -f 5
Запустите вакуум только на таблице tbl1, которая находится в схеме sc1 с порогом вакуума 90%.
./vacuum-analyze-utility.sh -h endpoint -u bhuvi -d dev -s sc1 -t tbl1 -a 0 -c 90
Запустите анализ только схемы sc1, но установите analysis_threshold_percent=0,01
./vacuum-analyze-utility.sh -h endpoint -u bhuvi -d dev -s sc1 -t tbl1 -a 1 -v 0 -r 0.01
Выполните пробный прогон (сгенерируйте SQL-запросы) для анализа всех таблиц в схеме sc2.
./vacuum-analyze-utility.sh -h endpoint -u bhuvi -d dev -s sc2 -z 1