无法从AWS Redshift访问AWS Athena表

时间:2019-04-30 09:41:44

标签: amazon-redshift amazon-athena

我正在尝试从AWS Redshift访问现有的AWS Athena表。

我尝试在AWS Redshift控制台中创建外部架构(指向AWS Athena DB)。它成功创建了外部模式,但是不显示Athena DB中的表。下面是使用的代码。

CREATE EXTERNAL SCHEMA Ext_schema_1
FROM DATA CATALOG
DATABASE 'sample_poc'
REGION 'us-east-1'
IAM_ROLE 'arn:aws:iam::55276673986:role/sample_Redshift_Role';

很少观察到..

  1. 即使我指定的Athena数据库名称不存在,它仍然会在Redshift中创建外部架构。
  2. 我的Redshift角色具有对S3和Athena的完全访问权限。

1 个答案:

答案 0 :(得分:1)

AWS Glue目录包含数据库,其中包含表。从Athena或Glue Catalog的角度来看,没有任何模式。

在Redshift Spectrum中,您创建一个EXTERNAL SCHEMA,它实际上是一个占位符对象,是Redshift中指向胶水目录的指针。

  
      
  1. 即使我指定的Athena数据库名称不存在,它仍然会在Redshift中创建外部架构。
  2.   

正如您所发现的那样,对象的创建是懒惰的,如果需要调整IAM角色,这很有用。请注意,文档中的示例还有一个附加子句:

create external database if not exists

因此,如果您也要创建数据库,则需要完整的陈述。

CREATE EXTERNAL SCHEMA Ext_schema_1 
FROM DATA CATALOG
DATABASE 'sample_poc'
REGION 'us-east-1'
IAM_ROLE 'arn:aws:iam::55276673986:role/sample_Redshift_Role'
CREATE EXTERNAL DATABASE IF NOT EXISTS;
  

它不显示Athena DB中的表

如果要为不存在的数据库创建EXTERNAL SCHEMA,则将无任何显示。我假设您的观点1.与您创建外部架构的实际尝试无关。您将其指向具有表的现有架构。

我发现使用Redshift Spectrum DDL创建的表可通过Glue Catalog立即用于Athena,并且我尝试在Glue Catalog中指定表,也使用Crawler,这些表在Redshift中可见。

您使用什么工具尝试显示表格?您是说表格未在元数据视图中列出,还是表示表格内容未显示?

Redshift确实在允许的数据类型上有一些差异,并且Athena中所需的Hive DDL与Redshift Spectrum DDL可能有一些差异。 Spectrum has some nesting limitations

  
      
  1. 我的Redshift角色可以完全访问S3和Athena
  2.   

假设您使用的是Glue Catalog,而不是旧的Athena目录,那么您的角色不需要任何Athena访问。