我在红移中有300多张表。
数据正在每日更新基本只是想知道我可以在redshift中创建一个udf来自动化真空过程。
我找到了一个使用python自动化的链接,但不是那个伟大的python编码器,我正在寻找sql脚本中的解决方案。
答案 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连接属性创建了环境变量。
答案 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