无法从 AWS Redshift 访问 AWS Athena 表

Posted

技术标签:

【中文标题】无法从 AWS Redshift 访问 AWS Athena 表【英文标题】:Unable to access AWS Athena table from AWS Redshift 【发布时间】:2019-04-30 09:41:43 【问题描述】:

我正在尝试从 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';

很少观察..

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

【问题讨论】:

在阅读Creating External Schemas for Amazon Redshift Spectrum - Amazon Redshift 时,我想知道您是否需要“将您的 Athena 数据目录迁移到 AWS Glue 数据目录”? 【参考方案1】:

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

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

    即使我指定不存在的 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 的表

如果您正在为一个不存在的数据库创建外部架构,那么将不会显示任何内容。我假设您的观点1. 与您创建外部模式的真正尝试无关;您将其指向带有表的现有架构。

我发现使用 Redshift Spectrum DDL 创建的表可以立即通过 Glue 目录提供给 Athena。 我还尝试在 Glue Catalog 中指定表,或者使用 Crawler,在这两种情况下,这些表在 Redshift 中都是可见的。

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

Redshift 似乎在允许的数据类型上有一些差异,而 Athena 中所需的 Hive DDL 可能与 Redshift Spectrum DDL 有一些差异。 Spectrum has some nesting limitations.

    我的 Redshift 角色拥有对 S3 和 Athena 的完全访问权限

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

【讨论】:

以上是关于无法从 AWS Redshift 访问 AWS Athena 表的主要内容,如果未能解决你的问题,请参考以下文章

无法从 AWS lambda 连接 AWS redshift

无法从 lambda 中的 python 连接到 aws redshift

无法将数据复制到 AWS RedShift

python pyscopg2 无法从 AWS redshift 中选择数据

AWS:将日志从 Amazon CloudWatch 导出到 Amazon Redshift

AWS 数据管道。 EC2Resource 无法访问红移