Redshift中CREATE TABLE AS执行、定时任务及权限问题咨询
Redshift预计算表创建+定时更新方案
一、在哪执行CREATE TABLE AS命令
随便用个能连接Redshift的SQL工具就行:
- 直接用AWS控制台里的Redshift查询编辑器v2:找到Redshift服务,进入集群详情页,顶部就能看到查询编辑器入口,登录后直接写SQL执行
- 本地SQL客户端:比如DBeaver、Navicat,用你的Redshift集群端点、端口、数据库名、账号密码建立连接,连接成功后执行命令
命令示例(全量刷新表):
-- 第一次创建用CREATE TABLE,后续刷新可以用CREATE OR REPLACE TABLE覆盖旧数据 CREATE OR REPLACE TABLE your_precomputed_table AS -- 这里替换成你的多表关联复杂查询 SELECT t1.id, t2.name, t3.amount FROM table1 t1 JOIN table2 t2 ON t1.id = t2.ref_id JOIN table3 t3 ON t2.id = t3.ref_id;
二、设置每12小时定时更新
Redshift本身没内置定时任务,得靠AWS其他服务配合,两种简单方案:
方案1:EventBridge + Redshift Data API(不用写代码)
- 先在Redshift集群控制台开启Data API(集群详情页→配置→Data API,启用)
- 去EventBridge控制台创建规则:
- 规则类型选计划,触发频率选每12小时,或者直接写cron表达式
0 */12 * * ? * - 目标选Redshift Data API,填写你的集群名、数据库名、要执行的SQL(就是上面的CREATE OR REPLACE语句),再指定一个有Redshift操作权限的IAM角色
- 规则类型选计划,触发频率选每12小时,或者直接写cron表达式
- 保存规则后,到点就会自动执行SQL刷新表
方案2:EventBridge + Lambda(适合需要复杂逻辑的场景)
- 写个简单的Lambda函数(比如用Python),用psycopg2库连接Redshift,执行刷新表的SQL
- 在EventBridge创建定时规则,触发频率设为每12小时,把这个Lambda设为目标
- 给Lambda的IAM角色加权限:允许连接Redshift(如果在VPC里要配置VPC访问),以及执行Redshift SQL的权限
三、所需最小权限
执行CREATE TABLE AS的SQL权限
- 对目标数据库的
CREATE TABLE权限 - 对查询用到的所有源表的
SELECT权限 - 如果表要建在特定schema下,还需要该schema的
USAGE权限
授权SQL示例:
-- 授予数据库建表权限 GRANT CREATE ON DATABASE your_db_name TO your_user; -- 授予schema使用权限 GRANT USAGE ON SCHEMA your_schema TO your_user; -- 授予源表查询权限 GRANT SELECT ON TABLE schema1.table1, schema2.table2 TO your_user;
定时任务相关权限
- 用Data API方案:EventBridge用的IAM角色需要
redshift-data:ExecuteStatement权限,以及访问Redshift集群的权限 - 用Lambda方案:Lambda的IAM角色需要
redshift-data:ExecuteStatement(或连接Redshift的网络权限),EventBridge的角色需要lambda:InvokeFunction权限
内容的提问来源于stack exchange,提问作者RobCrew
相关产品推荐
相关产品推荐

