aws-lambda - 有没有办法通过 udf 自动化 redshift vaccum 过程?

标签 aws-lambda amazon-redshift aws-redshift

我在 redshift 中有超过 300 个表。

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

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

最佳答案

不幸的是,您不能使用 udf 来完成这样的事情,udf 是简单的输入/输出函数,旨在在查询中使用。

您最好的选择是使用 AWS 实验室的这个开源工具:VaccumAnalyzeUtility 。使用此工具的好处在于,它非常智能,仅在需要它们的表上运行 VACUUM,并且它还会在需要它的表上运行 ANALYZE

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

在 git 中拉取 amazon-redshift-utils 存储库:

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

关于aws-lambda - 有没有办法通过 udf 自动化 redshift vaccum 过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47570770/

相关文章:

amazon-web-services - 在 AWS Lambda 超时时获取通知

java - { "errorType": "java.lang.ExceptionInInitializerError" } in AWS Lambda Function

javascript - VPC下Lambda访问Api Gateway

amazon-redshift - 我需要知道当前有锁的表的列表

date - 从日期列中减去月份

sql - 如果 parent 在其他行有 child ,如何避免选择没有 child 的 parent 行?

node.js - EC2 对比 Elastic Beanstalk 对比 Lambda