使用Redshift Spectrum的步骤是什么?

时间:2017-06-20 07:39:30

标签: amazon-web-services amazon-s3 amazon-redshift amazon-redshift-spectrum

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

如果我正在使用SQL workbench,我可以从中创建外部模式,还是需要从AWS控制台或Athena创建它。?

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

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

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

1 个答案:

答案 0 :(得分:3)

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政策不允许对Athena进行Redshift控制。
  4. 您未在CREATE EXTERNAL DATABASE IF NOT EXISTS声明中使用CREATE EXTERNAL SCHEMA参数。
  5. 要允许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