使用 Amazon Redshift Spectrum 查询外部数据 - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用 Amazon Redshift Spectrum 查询外部数据

通过使用 Amazon Redshift Spectrum,您可以从 Amazon S3 中的文件有效地查询和检索结构化和半结构化数据,而不必将数据加载到 Amazon Redshift 表中。Redshift Spectrum 查询采用了大规模并行以便针对大型数据集极快地运行。很多处理发生在 Redshift Spectrum 层中,而大多数数据位于 Amazon S3 中。多个集群可同时查询 Amazon S3 上的同一数据集,而无需为每个集群复制数据。

Amazon Redshift Spectrum 概览

Amazon Redshift Spectrum 驻留在独立于您的集群的专用 Amazon Redshift 服务器上。Amazon Redshift 将很多计算密集型任务(如谓词筛选和聚合)下推到 Redshift Spectrum 层。因此,Redshift Spectrum 查询使用的集群处理容量比其他查询的少得多。Redshift Spectrum 还可智能地扩展。基于您的查询的需求,Redshift Spectrum 可能能够使用数千个实例来利用大规模并行处理。

您通过定义您的文件的结构并将文件作为外部数据目录中的表注册来创建 Redshift Spectrum 表。外部数据目录可以是 Amazon Glue、Amazon Athena 附带的数据目录或您自己的 Apache Hive 元存储。您可使用数据定义语言 (DDL) 命令或使用连接到外部数据目录的任何其他工具从 Amazon Redshift 创建和管理外部表。对外部数据目录进行的更改将立即对您的任何 Amazon Redshift 集群可用。

您也可在一个或多个列上为外部表分区。将分区定义为外部表的一部分可以提高性能。提高性能的原因是,Amazon Redshift 查询优化程序消除了不包含查询数据的分区。

在定义 Redshift Spectrum 表之后,您可以像查询和联接任何其他 Amazon Redshift 表一样查询和联接这些表。Redshift Spectrum 不支持对外部表的更新操作。您可将 Redshift Spectrum 表添加到多个 Amazon Redshift 集群并在同一Amazon区域的任何集群中查询 Amazon S3 上的相同数据。更新 Amazon S3 数据文件后,立即可从您的任何 Amazon Redshift 集群查询到该数据。

您访问的 Amazon Glue 数据目录可能已加密以提高安全性。如果 Amazon Glue 目录已加密,您需要使用 Amazon Glue 的 Amazon Key Management Service (Amazon KMS) 密钥来访问 Amazon Glue 目录。Amazon Glue 目录加密并非在所有Amazon区域中都可用。有关受支持的 Amazon 区域的列表,请参阅 Amazon Glue 开发人员指南中的 Amazon Glue 的加密和安全访问。有关 Amazon Glue 数据目录加密的更多信息,请参阅 Amazon Glue 开发人员指南中的加密您的 Amazon Glue 数据目录

注意

您无法使用用于标准 Amazon Redshift 表(如 PG_TABLE_DEFSTV_TBL_PERM、PG_CLASS 或 information_schema)的同一资源查看 Redshift Spectrum 表的详细信息。如果您的商业智能或分析工具无法识别 Redshift Spectrum 外部表,请将您的应用程序为配置查询 SVV_EXTERNAL_TABLESSVV_EXTERNAL_COLUMNS

Amazon Redshift Spectrum 区域

除区域特定文档中另有说明的外,Redshift Spectrum 已在提供 Amazon Redshift 的 Amazon Web Services 区域开放。有关商业区域中 Amazon Web Services 区域的可用性,请参阅《Amazon Web Services 一般参考》Redshift API服务端点

Amazon Redshift Spectrum 注意事项

在使用 Amazon Redshift Spectrum 时,请注意以下事项:

  • Amazon Redshift 集群与 Amazon S3 桶必须位于同一Amazon区域。

  • Redshift Spectrum 不支持预置集群的增强型 VPC 路由。要访问 Amazon S3 数据,您可能需要执行其他配置步骤。有关更多信息,请参阅《Amazon Redshift 管理指南》中的 Redshift Spectrum 与增强型 VPC 路由

  • Redshift Spectrum 支持 Amazon S3 接入点别名。有关更多信息,请参阅《Amazon Simple Storage Service 用户指南》中的为您的接入点使用桶式别名。但是,Redshift Spectrum 不支持使用 Amazon S3 接入点别名的 VPC。有关更多信息,请参阅《Amazon Redshift 管理指南》中的 Redshift Spectrum 与增强型 VPC 路由

  • 您不能对外部表执行更新或删除操作。要在指定架构中创建新的外部表,可以使用 CREATE EXTERNAL TABLE。有关 CREATE EXTERNAL TABLE 的更多信息,请参阅CREATE EXTERNAL TABLE。要将 SELECT 查询的结果插入到外部目录中的现有外部表中,可以使用 INSERT(外部表)。有关 INSERT(外部表)的更多信息,请参阅 INSERT(外部表)

  • 除非您使用的是为 Amazon Lake Formation 启用的 Amazon Glue Data Catalog,否则您无法控制用户对于外部表的权限。相反,您可以授予和撤销对外部 schema 的权限。有关如何使用 Amazon Lake Formation 的更多信息,请参阅将 Redshift Spectrum 与 Amazon Lake Formation 结合使用

  • 要运行 Redshift Spectrum 查询,数据库用户必须有权在数据库中创建临时表。以下示例将数据库 spectrumdb 的临时权限授予 spectrumusers 用户组。

    grant temp on database spectrumdb to group spectrumusers;

    有关更多信息,请参阅GRANT

  • 使用 Athena 数据目录或 Amazon Glue 数据目录作为元数据存储时,请参阅《Amazon Redshift 管理指南》中的配额和限制

  • Redshift Spectrum 不支持在 Amazon EMR 中使用 Kerberos。

  • 要在中国Amazon区域中使用 Redshift Spectrum,您必须完成 Amazon 账户的互联网内容提供商 (ICP) 备案流程。如果未完成此流程,您可能会在通过 Redshift Spectrum 访问 Amazon S3 时看到拒绝访问错误。有关的更多信息,请参阅在中国开始使用 Amazon 服务中的 ICP 备案