

# 向源 RDS 数据库中添加数据并查询数据
<a name="zero-etl.querying"></a>

要完成创建将数据从 Amazon RDS 复制到 Amazon Redshift 的零 ETL 集成，您必须在目标目的地中创建数据库。

要连接 Amazon Redshift，请连接到您的 Amazon Redshift 集群或工作组，并创建一个引用集成标识符的数据库。然后，您可以向源 RDS 数据库中添加数据，并在 Amazon Redshift 或 Amazon SageMaker 中查看复制的数据。

**Topics**
+ [创建目标数据库](#zero-etl.create-db)
+ [向源数据库中添加数据](#zero-etl.add-data-rds)
+ [在 Amazon Redshift 中查询您的 Amazon RDS 数据](#zero-etl.query-data-redshift)
+ [RDS 和 Amazon Redshift 数据库之间的数据类型差异](#zero-etl.data-type-mapping)
+ [适用于 RDS for PostgreSQL 的 DDL 操作](#zero-etl.ddl-postgres)

## 创建目标数据库
<a name="zero-etl.create-db"></a>

在开始将数据复制到 Amazon Redshift 中之前，创建集成后，您必须在目标数据仓库中创建一个数据库。此数据库必须包含对集成标识符的引用。您可以使用 Amazon Redshift 控制台或查询编辑器 v2 来创建数据库。

有关创建目标数据库的说明，请参阅[在 Amazon Redshift 中创建目标数据库](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-using.creating-db.html#zero-etl-using.create-db)。

## 向源数据库中添加数据
<a name="zero-etl.add-data-rds"></a>

在配置集成后，可以使用要复制到数据仓库中的数据填充源 RDS 数据库。

**注意**  
Amazon RDS 与目标分析仓库中的数据类型存在差异。有关数据类型映射的表，请参阅[RDS 和 Amazon Redshift 数据库之间的数据类型差异](#zero-etl.data-type-mapping)。

首先，使用您选择的 MySQL 客户端连接到源数据库。有关说明，请参阅。[连接到 MySQL 数据库实例](USER_ConnectToInstance.md)

然后，创建一个表并插入一行示例数据。

**重要**  
确保该表有主键。否则，它无法复制到目标数据仓库。

**RDS for MySQL**

以下示例使用 [MySQL Workbench 实用程序](https://dev.mysql.com/downloads/workbench/)。

```
CREATE DATABASE my_db;

USE my_db;

CREATE TABLE books_table (ID int NOT NULL, Title VARCHAR(50) NOT NULL, Author VARCHAR(50) NOT NULL,
Copyright INT NOT NULL, Genre VARCHAR(50) NOT NULL, PRIMARY KEY (ID));

INSERT INTO books_table VALUES (1, 'The Shining', 'Stephen King', 1977, 'Supernatural fiction');
```



**RDS for PostgreSQL**：

以下示例使用 `[psql](https://www.postgresql.org/docs/current/app-psql.html)` PostgreSQL 交互式终端。连接到数据库时，请包括要复制的数据库名称。

```
psql -h mydatabase.123456789012.us-east-2.rds.amazonaws.com -p 5432 -U username -d named_db;

named_db=> CREATE TABLE books_table (ID int NOT NULL, Title VARCHAR(50) NOT NULL, Author VARCHAR(50) NOT NULL,
Copyright INT NOT NULL, Genre VARCHAR(50) NOT NULL, PRIMARY KEY (ID));

named_db=> INSERT INTO books_table VALUES (1, 'The Shining', 'Stephen King', 1977, 'Supernatural fiction');
```

**RDS for Oracle**：

以下示例使用 SQL\$1Plus 连接到 RDS for Oracle 数据库。

```
sqlplus 'user_name@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=dns_name)(PORT=port))(CONNECT_DATA=(SID=database_name)))'

SQL> CREATE TABLE books_table (ID int NOT NULL, Title VARCHAR(50) NOT NULL, Author VARCHAR(50) NOT NULL,
Copyright INT NOT NULL, Genre VARCHAR(50) NOT NULL, PRIMARY KEY (ID));

SQL> INSERT INTO books_table VALUES (1, 'The Shining', 'Stephen King', 1977, 'Supernatural fiction');
```

## 在 Amazon Redshift 中查询您的 Amazon RDS 数据
<a name="zero-etl.query-data-redshift"></a>

将数据添加到 RDS 数据库后，数据会复制到目标数据库并准备好供查询。

**查询复制的数据**

1. 导航到 Amazon Redshift 控制台，然后从左侧导航窗格中选择**查询编辑器 v2**。

1. 连接到您的集群或工作组，然后从下拉菜单中选择您通过集成创建的目标数据库（本示例中为 **destination\$1database**）。有关创建目标数据库的说明，请参阅[在 Amazon Redshift 中创建目标数据库](https://docs.aws.amazon.com/redshift/latest/mgmt/zero-etl-using.creating-db.html#zero-etl-using.create-db)。

1. 使用 SELECT 语句来查询您的数据。在本例中，您可以运行以下命令，从您在源 RDS 数据库中创建的表中选择所有数据：

   ```
   SELECT * from my_db."books_table";
   ```  
![\[在查询编辑器中运行 SELECT 语句。结果是添加到 Amazon RDS 数据库中的单行示例数据。\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/zero-etl-redshift-editor.png)
   + `my_db` 是 RDS 数据库模式名称。
   + `books_table` 是 RDS 表名称。

也可以使用命令行客户端查询数据。例如：

```
destination_database=# select * from my_db."books_table";

 ID |       Title |        Author |   Copyright |                  Genre |  txn_seq |  txn_id
----+–------------+---------------+-------------+------------------------+----------+--------+
  1 | The Shining |  Stephen King |        1977 |   Supernatural fiction |        2 |   12192
```

**注意**  
为了区分大小写，请对架构、表和列名使用双引号（" "）。有关更多信息，请参阅 [enable\$1case\$1sensitive\$1identifier](https://docs.aws.amazon.com/redshift/latest/dg/r_enable_case_sensitive_identifier.html)。

## RDS 和 Amazon Redshift 数据库之间的数据类型差异
<a name="zero-etl.data-type-mapping"></a>

下面的表显示 RDS for MySQL、RDS for PostgreSQL 和 RDS for Oracle 数据类型与相应目标数据类型的映射。*Amazon RDS 目前仅支持将这些数据类型用于零 ETL 集成。*

如果源数据库中的表包含不受支持的数据类型，则该表将不同步并且目的地目标无法使用该表。从源到目标的流式传输仍在继续，但数据类型不受支持的表不可用。要修复该表并使其在目标目的地中可用，您必须手动恢复重大更改，然后通过运行 `[ALTER DATABASE...INTEGRATION REFRESH](https://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_DATABASE.html)` 来刷新集成。

**注意**  
您无法刷新与 Amazon SageMaker 智能湖仓的零 ETL 集成。而是应删除并尝试重新创建集成。

**Topics**
+ [RDS for MySQL](#zero-etl.data-type-mapping-mysql)
+ [RDS for PostgreSQL](#zero-etl.data-type-mapping-postgres)
+ [RDS for Oracle](#zero-etl.data-type-mapping-oracle)

### RDS for MySQL
<a name="zero-etl.data-type-mapping-mysql"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/zero-etl.querying.html)

### RDS for PostgreSQL
<a name="zero-etl.data-type-mapping-postgres"></a>

RDS for PostgreSQL 的零 ETL 集成不支持自定义数据类型或由扩展创建的数据类型。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/zero-etl.querying.html)

### RDS for Oracle
<a name="zero-etl.data-type-mapping-oracle"></a>

**不支持的数据类型**

Amazon Redshift 不支持以下 RDS for Oracle 数据类型：
+ `ANYDATA`
+ `BFILE`
+ `REF`
+ `ROWID`
+ `UROWID`
+ `VARRAY`
+ `SDO_GEOMETRY`
+ 用户定义的数据类型

**数据类型差异**

下表显示了当 RDS for Oracle 为源而 Amazon Redshift 为目标时，影响零 ETL 集成的数据类型差异。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/zero-etl.querying.html)

## 适用于 RDS for PostgreSQL 的 DDL 操作
<a name="zero-etl.ddl-postgres"></a>

Amazon Redshift 源自 PostgreSQL，由于具有共同的 PostgreSQL 架构，因此它与 RDS for PostgreSQL 共享多项功能。零 ETL 集成利用这些相似之处来简化从 RDS for PostgreSQL 到 Amazon Redshift 的数据复制，从而按名称映射数据库并利用共享的数据库、架构和表结构。

管理 RDS for PostgreSQL 零 ETL 集成时应考虑以下几点：
+ 隔离是在数据库级别进行管理。
+ 复制发生在数据库级别。
+ RDS for PostgreSQL 数据库按名称映射到 Amazon Redshift 数据库，如果原始 Redshift 数据库被重命名，则数据将流向相应的已重命名的数据库。

尽管 Amazon Redshift 和 RDS for PostgreSQL 有相似之处，但也存在重大差异。以下各节概述了 Amazon Redshift 系统对常见 DDL 操作的响应。

**Topics**
+ [数据库操作](#zero-etl.ddl-postgres-database)
+ [架构操作](#zero-etl.ddl-postgres-schema)
+ [表操作](#zero-etl.ddl-postgres-table)

### 数据库操作
<a name="zero-etl.ddl-postgres-database"></a>

下表显示了系统对数据库 DDL 操作的响应。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/zero-etl.querying.html)

### 架构操作
<a name="zero-etl.ddl-postgres-schema"></a>

下表显示了系统对架构 DDL 操作的响应。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/zero-etl.querying.html)

### 表操作
<a name="zero-etl.ddl-postgres-table"></a>

下表显示了系统对表 DDL 操作的响应。

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/zero-etl.querying.html)