Amazon s3 我是否可以将外部表别名为红移以删除架构名称?

Amazon s3 我是否可以将外部表别名为红移以删除架构名称?,amazon-s3,amazon-redshift,amazon-redshift-spectrum,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; 我用红移创建了一个外部表,如下所示: create external table spectrum.my_table( id bigint, accountI

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

create external schema spectrum 
from data catalog 
database 'spectrumdb' 
iam_role 'my_iam_role'
create external database if not exists;
我用红移创建了一个外部表,如下所示:

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\u alias
,而不是
spectrum.my_table
?基本上,我们希望对外部表的更改对Redshift实例的客户端不透明(这意味着我们不能更改表名)。非常感谢你的帮助

红移没有别名,最好的选择是创建一个视图

创建视图时需要使用不带模式绑定的
选项,因为视图位于外部表上

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

alteruser。。将搜索路径设置为..

使用视图访问外部表的其他好处包括:

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

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

如果我使用了视图,这是否意味着在视图上运行的每个频谱查询都会运行视图查询?因此,我将失去在Spectrum中扫描更少列的好处,因为整个表将加载到我的红移集群中。查看以下链接以获取“每次在查询中引用视图时都会运行定义视图的查询”中的其他信息。这是否意味着每次调用视图时都会加载整个表,即使是在使用拼花地板或分区时也是如此?我相信“运行查询”和“加载数据”是两回事。在您的第一条评论中提到“整个表将加载到我的红移集群中”,我认为在查询外部表时情况并非如此。红移频谱不会为了返回结果而将数据加载到红移集群中,它只使用“红移频谱层”扫描S3上的数据,感谢您的回复。如果在外部表上创建一个视图来重命名它,则如下所示:
CREATE view some\u table AS SELECT*FROM spectrum.some\u table
,然后我们将在每个查询中扫描拼花地板中的所有数据,以
some\u table
,对吗?