我可以在redshift中为外部表加上别名以删除架构名称吗?

时间:2018-09-27 17:38:02

标签: amazon-s3 amazon-redshift amazon-redshift-spectrum

我们想将表迁移到Spectrum,这需要定义一个外部模式

create external schema spectrum 
from data catalog 
database 'spectrumdb' 
iam_role 'my_iam_role'
create external database if not exists;

我在Redshift中创建了一个外部表,如下所示:

create external table spectrum.my_table(
 id bigint,
 accountId bigint,
 state varchar(65535),
 ) stored as parquet
 location 's3://some_bucket/my_table_files';

是否可以对表进行别名处理,以便在查询表时可以将其命名为my_table_alias而不是spectrum.my_table?基本上,我们希望使外部表的更改对于Redshift实例的客户端而言是不透明的(这意味着我们无法更改表名)。非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

Redshift没有别名,您最好的选择是创建一个视图。

由于视图位于外部表上,因此在创建视图时需要使用WITH NO SCHEMA BINDING选项。

如果您不想指定架构名称,或者有类似要求,请在公共架构中创建视图,或将用户默认架构设置为视图所在的架构

alter user .. set search_path to ..

使用视图访问外部表的其他好处是,您可以

  • 重命名列以更加用户友好
  • 添加或删除具有视图定义的列
  • 更改数据类型和/或日期/时间格式
  • 您将能够在不影响用户访问的情况下更改外部表的名称/结构

让我知道这是否回答了您的问题。