目前我正在使用Amazon Redshift和Amazon S3来存储数据。现在我想使用Spectrum来提高性能,但对如何正确使用它感到困惑。
如果我正在使用SQL workbench,我可以从中创建外部模式,还是需要从AWS控制台或Athena创建它。?
我需要在特定地区使用雅典娜吗?是否可以在没有雅典娜的情况下使用频谱。
现在,如果我尝试通过SQL工作台创建外部模式,则会抛出错误“未启用CREATE EXTERNAL SCHEMA”如何启用此功能?
如果有人使用Spectrum并让我知道使用频谱的详细步骤,请提供帮助。
答案 0 :(得分:3)
Redshift Spectrum需要包含表定义的外部数据目录。这个数据目录包含对S3中文件的引用,而不是Redshift中的外部表定义。此数据目录可以在Elastic MapReduce中定义为Hive目录(如果您有现有的EMR部署则很好)或在Athena中定义(如果您没有EMR或者不想管理Hadoop,则很好)。如果您愿意,可以通过Redshift完全管理Athena路线。
在我看来,你的问题是四件事之一。之一:
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