Amazon s3 我是否可以将外部表别名为红移以删除架构名称?
我们希望将表迁移到Spectrum,这需要定义一个外部模式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
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
,对吗?