我在 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/