有没有办法通过udf自动化redshift真空过程?

时间:2017-11-30 10:08:08

标签: aws-lambda amazon-redshift aws-redshift

我在红移中有300多张表。

数据正在每日更新基本只是想知道我可以在redshift中创建一个udf来自动化真空过程。

我找到了一个使用python自动化的链接,但不是那个伟大的python编码器,我正在寻找sql脚本中的解决方案。

5 个答案:

答案 0 :(得分:1)

不幸的是,你不能使用udf这样的东西,udf是简单的输入/输出函数,意味着在查询中使用。

您最好的选择是使用AWS Labs的这个开源工具:VaccumAnalyzeUtility。使用此工具的好处在于,只对需要它们的表运行VACUUM非常聪明,并且它还会在需要它的表上运行ANALYZE

设置为cron作业非常容易。以下是如何完成的示例:

在git中拉出amazon-redshift-utils repo:

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

答案 1 :(得分:0)

您不能使用UDF,UDF无法运行更新数据的命令。

答案 2 :(得分:0)

是的,我已经在Java中创建了一个AWS lamda函数,并使用云监视事件使用cron进行了调度。 Java中的AWS lamda函数期望上载有阴影的jar。我已经在lamda函数中为传递给Java处理程序的redshift连接属性创建了环境变量。enter image description here

答案 3 :(得分:0)

现在您可以使用auto vaccum,Redshift现在提供此选项

答案 4 :(得分:0)

这是我的Shell脚本实用程序,可以通过对表格过滤器的更好控制来实现此自动化。

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'

在除模式sc1之外的所有模式中的所有表上运行vacuum FULL。但不要分析

./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

仅对除表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

仅在模式sc1中具有真空度阈值90%的表tbl1上运行真空度。

./vacuum-analyze-utility.sh -h endpoint -u bhuvi -d dev -s sc1 -t tbl1 -a 0 -c 90

仅运行模式sc1的分析,但设置analyzer_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