在 Redshift 中创建视图时有什么方法可以强制后期绑定?

Is there any way to force late-binding when creating views in Redshift?

我正在使用 Airflow 来编排 ETL。许多任务都有 drop table 子句,当用户在没有后期绑定的情况下创建视图时,这些子句会失败。将所有任务更改为 drop cascade 不是一个选项。

有没有办法强制后期绑定?通过用户权限或 Redshift 配置。

无法强制执行此操作。

要创建后期绑定视图,只需添加

WITH NO SCHEMA BINDING

参见:CREATE VIEW - Amazon Redshift

不,您不能强制所有视图在集群或数据库级别使用后期绑定。您可以创建一个存储过程,它使用 v_generate_view_ddl 视图逻辑来获取所有相关视图的 DDL 并自动重新创建它们。

FWIW,如果可以避免,我建议不要直接对面向用户的表执行 ETL。 运行 针对用户无法访问的暂存模式的 ETL,然后在加载和准备数据时 "flip" 数据进入他们的模式。您可以使用 ATLER TABLE APPEND 快速完成翻转。