我正在尝试从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';
很少观察到..
答案 0 :(得分:1)
AWS Glue目录包含数据库,其中包含表。从Athena或Glue Catalog的角度来看,没有任何模式。
在Redshift Spectrum中,您创建一个EXTERNAL SCHEMA
,它实际上是一个占位符对象,是Redshift中指向胶水目录的指针。
- 即使我指定的Athena数据库名称不存在,它仍然会在Redshift中创建外部架构。
正如您所发现的那样,对象的创建是懒惰的,如果需要调整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。
- 我的Redshift角色可以完全访问S3和Athena
假设您使用的是Glue Catalog,而不是旧的Athena目录,那么您的角色不需要任何Athena访问。