Aws lambda 有没有办法通过udf自动化红移真空过程?

Aws lambda 有没有办法通过udf自动化红移真空过程?,aws-lambda,amazon-redshift,aws-redshift,Aws Lambda,Amazon Redshift,Aws Redshift,我有300多张红移的桌子 数据每天都在更新,我只是想知道我是否可以在redshift中创建一个udf来自动化真空过程 我发现了一个使用python实现自动化的链接,但不是我正在寻找的sql脚本解决方案中的优秀python编码器。您不能使用UDF来实现这一点,UDF不能运行更新数据的命令。不幸的是,您不能将UDF用于类似的内容,UDF是用于查询的简单输入/输出函数 您最好使用AWS实验室的这个开源工具:。使用此工具的好处在于,它非常聪明,只在需要它们的表上运行VACUUM,并且它还将在需要它的表上

我有300多张红移的桌子

数据每天都在更新,我只是想知道我是否可以在redshift中创建一个udf来自动化真空过程


我发现了一个使用python实现自动化的链接,但不是我正在寻找的sql脚本解决方案中的优秀python编码器。

您不能使用UDF来实现这一点,UDF不能运行更新数据的命令。

不幸的是,您不能将UDF用于类似的内容,UDF是用于查询的简单输入/输出函数

您最好使用AWS实验室的这个开源工具:。使用此工具的好处在于,它非常聪明,只在需要它们的表上运行
VACUUM
,并且它还将在需要它的表上运行
ANALYZE

设置为cron作业非常容易。下面是一个如何做到这一点的示例:

在git中拉取amazon redshift utils repo:

git clone https://github.com/awslabs/amazon-redshift-utils
cd amazon-redshift-utils
创建可由cron运行的脚本。在文本编辑器中创建一个名为
run\u vacuum\u 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
添加以下条目:

30 2 * * * <path-to-the-cloned-repo>/run_vacuum_analyze.sh
30 2***/run\u vacuum\u analyze.sh

是的,我在java中创建了一个AWS lamda函数,并使用cron使用cloud watch事件进行调度。java中的AWS lamda函数要求上传着色jar。我已经在lamda函数中为传递到java处理程序的红移连接属性创建了环境变量。

现在您可以使用auto vaccum,红移现在提供了此选项。

这是我的shell脚本实用程序,可以通过更好地控制表过滤器来自动执行此操作

命令示例: 用真空吸尘器对所有表格进行分析

./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-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中的表tbl1上运行真空,真空阈值为90%

./vacuum-analyze-utility.sh -h endpoint -u bhuvi -d dev -s sc1 -t tbl1 -a 0 -c 90
运行仅分析模式sc1,但将分析阈值设置为0.01

./vacuum-analyze-utility.sh -h endpoint -u bhuvi -d dev -s sc1 -t tbl1 -a 1 -v 0 -r 0.01
对模式sc2上的所有表进行一次试运行(生成SQL查询)

./vacuum-analyze-utility.sh -h endpoint -u bhuvi -d dev -s sc2 -z 1

任何其他建议,我感谢您的帮助创建一个包含所有表的长sql脚本?感谢您提供的信息,如果您有分步方法,请共享文档。非常感谢您的帮助和支持。我是否可以创建一个shell脚本并作为cron job vaccum table运行1;真空表2;真空表3;真空表4。真空压片;您可以从这里下载java着色java项目,并使用mvn生成着色jar。主类有一个列表,其中包含所有需要抽真空和分析的表名。[链接]()
./vacuum-analyze-utility.sh -h endpoint -u bhuvi -d dev -s sc2 -z 1