使用 Amazon Redshift 访问联合数据时的注意事项
某些 Amazon Redshift 功能不支持对联合数据进行访问。您可以在下面找到相关的限制和注意事项。
以下是将联合查询与 Amazon Redshift 结合使用时的限制和注意事项:
联合查询支持对外部数据来源进行读取访问。无法在外部数据来源中写入或创建数据库对象。
在某些情况下,您可能访问与 Amazon Redshift 不同的 AWS 区域中的 Amazon RDS 或 Aurora DB 集群数据库。在这些情况下,您通常会因跨 AWS 地区传输数据而产生网络延迟和计费费用。我们建议您将 Aurora 全局数据库用于与 Amazon Redshift 集群位于同一 AWS 区域的本地端点。Aurora 全局数据库使用专用基础设施在任意两个 AWS 区域间进行基于存储的复制,典型延迟不到 1 秒。
考虑访问 Amazon RDS 或 Aurora DB 集群的成本。例如,使用此功能访问 Aurora DB 集群时,Aurora DB 集群费用基于 IOPS。
联合查询不允许从 RDS 或 Aurora DB 集群访问 Amazon Redshift。
联合查询仅在同时提供 Amazon Redshift 和 Amazon RDS 或 Aurora DB 集群的 AWS 区域中可用。
联合查询当前不支持
ALTER SCHEMA
。要更改 schema,请依次使用DROP
和CREATE EXTERNAL SCHEMA
。联合查询不适用于并发扩展。
联合查询当前不支持通过 PostgreSQL 外部数据包装程序进行访问。
对 RDS MySQL 或 Aurora MySQL 的联合查询支持在 READ COMMITTED 级别的事务隔离。
如果未指定,Amazon Redshift 会在端口 3306 上连接到 RDS for MySQL 或 Aurora MySQL。在为 MySQL 创建外部架构之前,请确认 MySQL 端口号。
如果未指定,Amazon Redshift 会在 5432 端口上连接到 RDS PostgreSQL 或 Aurora PostgreSQL。在为 PostgreSQL 创建外部架构之前,请确认 PostgreSQL 端口号。
从 MySQL 中获取 TIMESTAMP 和 DATE 数据类型时,零值被视为 NULL。
-
如果使用 Aurora DB 集群数据库读取器端点,则可能会出现“快照无效”错误。采用以下方法之一可以避免这种情况:
使用特定的 Aurora DB 集群实例端点(而不是使用 Aurora DB 集群端点)。此方法对来自 PostgreSQL 数据库的结果使用 REPEATABLE READ 事务隔离。
使用 Aurora DB 集群读取器端点并将会话的
pg_federation_repeatable_read
设置为 false。此方法对来自 PostgreSQL 数据库的结果使用 READ COMMITTED 事务隔离。有关 Aurora DB 集群读取器端点的更多信息,请参阅《Amazon Aurora 用户指南》中的 Aurora DB 集群端点类型。有关pg_federation_repeatable_read
的信息,请参阅pg_federation_repeatable_read。
以下是使用对 PostgreSQL 数据库的联合查询时事务的注意事项:
-
如果查询由联合表组成,则领导节点会在远程数据库上启动 READ ONLY REPEATABLE READ 事务。此事务在 Amazon Redshift 事务的持续时间内保留。
领导节点通过调用
pg_export_snapshot
创建远程数据库快照,并对受影响的表进行读锁定。计算节点启动事务,并使用在领导节点上创建的快照来向远程数据库发出查询。
支持的联合数据库版本
Amazon Redshift 外部 schema 可以引用外部 RDS PostgreSQL 或 Aurora PostgreSQL 中的数据库。当它这样做时,以下限制将适用:
创建引用 Aurora DB 集群的外部架构时,Aurora PostgreSQL 数据库必须为版本 9.6 或更高版本。
创建引用 Amazon RDS 的外部 schema 时,Amazon RDS PostgreSQL 数据库必须为版本 9.6 或更高版本。
Amazon Redshift 外部 schema 可以引用外部 RDS MySQL 或 Aurora MySQL 中的数据库。当它这样做时,以下限制将适用:
创建引用 Aurora DB 集群的外部架构时,Aurora MySQL 数据库必须为版本 5.6 或更高版本。
创建引用 Amazon RDS 的外部 schema 时,RDS MySQL 数据库必须为版本 5.6 或更高版本。