无法从 AWS Redshift 访问 AWS Athena 表

Nee*_*mar 5 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';
Run Code Online (Sandbox Code Playgroud)

很少观察..

  1. 即使我指定不存在的 Athena DB 名称,它仍会在 Redshift 中创建外部架构。
  2. 我的 Redshift 角色可以完全访问 S3 和 Athena。

Dav*_*vos 2

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

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

  1. 即使我指定不存在的 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;
Run Code Online (Sandbox Code Playgroud)

它不显示 Athena DB 中的表

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

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

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

Redshift 确实在允许的数据类型方面存在一些差异,并且 Athena 中所需的 Hive DDL 可能与 Redshift Spectrum DDL 存在一些差异。Spectrum 有一些嵌套限制

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

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