如何在 Amazon Redshift 上执行预定的 SQL 脚本?
How to execute scheduled SQL script on Amazon Redshift?
我在 Redshift 中每小时自动执行约 10 个查询系列(可能报告 success/failure)。
大多数查询都是对我的表的聚合。
我曾尝试将 AWS Lambda 与 CloudWatch Events 一起使用,但 Lambda 函数最多只能存活 5 分钟,而我的查询最多可能需要 25 分钟。
AWS 不提供简单的分布式 cron 样式服务,这有点奇怪。它对很多事情都有用。有 SWF,但 timing/scheduling 方面留给用户。您可以使用 Lambda/Cloudwatch 来触发 SWF 事件。获得像 activity.
这样合理的 cron 需要很多开销
正如评论所说,最简单的方法是 运行 一个小型实例并在那里托管 cron 作业。使用 1 的自动缩放组以获得一定的可靠性。一种类似但更复杂的方法是使用 elastic beanstalk.
如果您真的想要冗余、可靠性、可见性等,那么 third party solution like Airflow 可能值得一看。还有很多其他语言,具体取决于您的偏好语言。
这是一个包含更多信息的 similar question。
我以前遇到过同样的问题,
您可以使用 R 或 Python。
我用过 R ,你可以安装包 RpostgreSQL 并连接到你的 Redshift
附例:
drv <- dbDriver("PostgreSQL")
conn <-dbConnect(drv,host='mm-stats-1.ctea4hmr4vlw.us-east-1.redshift.amazonaws.com',port='5439',dbname='stats',user='xxx',password='yyy')
然后您可以使用 markdown 构建报告,然后使用 crontab 任务安排它。
我还使用 mailR 包将报告发送给其他用户
使用 aws lambda 运行 您的脚本。你可以安排它。见 https://docs.aws.amazon.com/lambda/latest/dg/with-scheduled-events.html
这在幕后使用 CloudWatch 事件。如果您从控制台执行此操作,它会为您进行设置。
您可以使用 Data Pipeline 来做到这一点,尽管我认为它已经过时了,因为他们已经有一段时间没有向该服务发布任何新功能,而且 GUI 非常陈旧且难以使用一起工作。使用 Data Pipeline 而不是 Lambda 的主要好处是 Lambda 函数只能 运行 最多 15 分钟,而 Data Pipeline 可以跟踪查询的状态直到它完成。
我使用 .NET 和 PostgreSQL 包创建了一个 AWS Lambda function to connect Amazon Redshift database
然后使用 CloudWatch 仪表板中的事件规则,我创建了一个 execute AWS Lambda periodically
的时间表
这对我来说很好,但创建连接到 Redshift 的 Lambda 函数的第一部分需要一些时间。最好使用包含 PostgreSQL 连接所需的库和包的层。 (由于 Redshift 基于 Postgre,它也支持这些驱动程序)
最后一个解决方案是使用连接到 Redshift 的其他数据库服务器
例如,我是 运行 一个 SQL 服务器,通过 LinkedServer 连接到 Redshift 数据库。所以实际上我使用 SQL 服务器代理来安排连接到 Redshift
的 SQL 作业
我在 Redshift 中每小时自动执行约 10 个查询系列(可能报告 success/failure)。
大多数查询都是对我的表的聚合。
我曾尝试将 AWS Lambda 与 CloudWatch Events 一起使用,但 Lambda 函数最多只能存活 5 分钟,而我的查询最多可能需要 25 分钟。
AWS 不提供简单的分布式 cron 样式服务,这有点奇怪。它对很多事情都有用。有 SWF,但 timing/scheduling 方面留给用户。您可以使用 Lambda/Cloudwatch 来触发 SWF 事件。获得像 activity.
这样合理的 cron 需要很多开销正如评论所说,最简单的方法是 运行 一个小型实例并在那里托管 cron 作业。使用 1 的自动缩放组以获得一定的可靠性。一种类似但更复杂的方法是使用 elastic beanstalk.
如果您真的想要冗余、可靠性、可见性等,那么 third party solution like Airflow 可能值得一看。还有很多其他语言,具体取决于您的偏好语言。
这是一个包含更多信息的 similar question。
我以前遇到过同样的问题,
您可以使用 R 或 Python。
我用过 R ,你可以安装包 RpostgreSQL 并连接到你的 Redshift 附例:
drv <- dbDriver("PostgreSQL")
conn <-dbConnect(drv,host='mm-stats-1.ctea4hmr4vlw.us-east-1.redshift.amazonaws.com',port='5439',dbname='stats',user='xxx',password='yyy')
然后您可以使用 markdown 构建报告,然后使用 crontab 任务安排它。
我还使用 mailR 包将报告发送给其他用户
使用 aws lambda 运行 您的脚本。你可以安排它。见 https://docs.aws.amazon.com/lambda/latest/dg/with-scheduled-events.html
这在幕后使用 CloudWatch 事件。如果您从控制台执行此操作,它会为您进行设置。
您可以使用 Data Pipeline 来做到这一点,尽管我认为它已经过时了,因为他们已经有一段时间没有向该服务发布任何新功能,而且 GUI 非常陈旧且难以使用一起工作。使用 Data Pipeline 而不是 Lambda 的主要好处是 Lambda 函数只能 运行 最多 15 分钟,而 Data Pipeline 可以跟踪查询的状态直到它完成。
我使用 .NET 和 PostgreSQL 包创建了一个 AWS Lambda function to connect Amazon Redshift database 然后使用 CloudWatch 仪表板中的事件规则,我创建了一个 execute AWS Lambda periodically
的时间表这对我来说很好,但创建连接到 Redshift 的 Lambda 函数的第一部分需要一些时间。最好使用包含 PostgreSQL 连接所需的库和包的层。 (由于 Redshift 基于 Postgre,它也支持这些驱动程序)
最后一个解决方案是使用连接到 Redshift 的其他数据库服务器 例如,我是 运行 一个 SQL 服务器,通过 LinkedServer 连接到 Redshift 数据库。所以实际上我使用 SQL 服务器代理来安排连接到 Redshift
的 SQL 作业