5

目前我正在使用 Amazon Redshift 和 Amazon S3 来存储数据。现在我想使用 Spectrum 来提高性能,但对如何正确使用它感到困惑。

如果我使用的是 SQL 工作台,我可以从同一个架构创建外部架构,还是需要从 AWS 控制台或 Athena 创建它。?

我是否需要在特定地区拥有 Athena。没有雅典娜可以使用频谱吗?

现在,如果我尝试通过 SQL 工作台创建外部模式,则会引发错误“未启用创建外部模式”如何启用此功能..?

如果有人使用过 Spectrum,请提供帮助,并让我知道使用 Spectrum 的详细步骤。

4

1 回答 1

6

Redshift Spectrum 需要一个包含表定义的外部数据目录。正是这个数据目录包含对 S3 中文件的引用,而不是 Redshift 中的外部表定义。此数据目录可以在 Elastic MapReduce 中定义为 Hive 目录(如果您有现有的 EMR 部署则很好)或在 Athena 中(如果您没有 EMR 或不想进入管理 Hadoop 则很好)。如果您愿意,可以由 Redshift 完全管理 Athena 路线。

在我看来,您的问题是四件事之一。任何一个:

  1. 您的 Redshift 集群不在当前支持 Athena 和 Spectrum 的 AWS 区域中。
  2. 您的 Redshift 集群版本尚不支持 Spectrum(1.0.1294 或更高版本)。
  3. 您的 IAM 策略不允许 Redshift 控制 Athena。
  4. 您没有在语句中使用CREATE EXTERNAL DATABASE IF NOT EXISTS参数。CREATE EXTERNAL SCHEMA

要允许 Redshift 管理 Athena,您需要将 IAM 策略附加到您的 Redshift 集群,以允许它完全控制 Athena,以及对包含您的数据的 S3 存储桶的读取访问权限。

一旦到位,您就可以像以前一样创建外部模式,确保CREATE EXTERNAL DATABASE IF NOT EXISTS参数也被传递。如果您没有预先存在的配置,这将确保在 Athena 中创建外部数据库:http: //docs.aws.amazon.com/redshift/latest/dg/c-getting-started-using-spectrum -create-external-table.html

最后,运行您的CREATE EXTERNAL TABLE语句,它将透明地在 Athena 数据目录中创建表元数据:http: //docs.aws.amazon.com/redshift/latest/dg/c-spectrum-external-tables.html

于 2017-06-20T09:39:27.003 回答