Amazon Redshift
数据库开发人员指南 (API 版本 2012-12-01)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

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

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

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

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

注意

您无法使用用于标准 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 仅在以下 AWS 区域中可用:

  • 美国东部(弗吉尼亚北部)地区 (us-east-1)

  • 美国东部(俄亥俄)区域 (us-east-2)

  • 美国西部(加利福利亚北部)区域 (us-west-1)

  • 美国西部(俄勒冈)区域 (us-west-2)

  • 亚太地区(孟买)区域 (ap-south-1)

  • 亚太区域(首尔) (ap-northeast-2)

  • 亚太区域(新加坡) (ap-southeast-1)

  • 亚太区域(悉尼) (ap-southeast-2)

  • 亚太区域(东京) (ap-northeast-1)

  • 加拿大 (中部) 区域 (ca-central-1)

  • 欧洲(法兰克福)区域 (eu-central-1)

  • 欧洲(爱尔兰)区域 (eu-west-1)

  • 欧洲 (伦敦) 区域 (eu-west-2)

  • 南美洲(圣保罗)区域 (sa-east-1)

Amazon Redshift Spectrum 注意事项

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

  • Amazon Redshift 群集和 Amazon S3 存储桶必须位于同一 AWS 区域。

  • 您的群集不能启用增强型 VPC 路由

  • 外部表为只读。您不能对外部表执行插入、更新或删除操作。

  • 您不能控制用户对外部表的权限。相反,您可以授予和撤销对外部架构的权限。

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

    grant temp on database spectrumdb to group spectrumusers;

    有关更多信息,请参阅 GRANT

  • Redshift Spectrum 不支持嵌套数据类型 (如 STRUCT、ARRAY 和 MAP)。

  • 当使用 Athena 或 AWS Glue 数据目录时,以下限制适用:

    • 每个账户最多 10,000 个数据库。

    • 每个数据库最多 100,000 个表。

    • 每个表最多 1,000,000 个分区。

    • 每个账户最多 10,000,000 个分区。

    您可通过联系 AWS Support 来请求增加限制。

    这些限制不适用于 Apache Hive 元存储。

    有关更多信息,请参阅 为 Amazon Redshift Spectrum 创建外部架构