

AWS Data Pipeline 不再向新客户提供。的现有客户 AWS Data Pipeline 可以继续照常使用该服务。[了解详情](https://aws.amazon.com/blogs/big-data/migrate-workloads-from-aws-data-pipeline/)

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Amazon RDS 到 Amazon Redshift 模板
<a name="dp-template-redshift"></a>

以下两个模板使用转换脚本，将表从 Amazon RDS MySQL 复制到 Amazon Redshift，该脚本使用源表架构创建 Amazon Redshift 表，有以下几点需要注意：
+ 如果未指定分配键，则将 Amazon RDS 表的第一个主键设置为分配键。
+ 执行复制到 Amazon Redshift 的操作时，您无法跳过 Amazon RDS MySQL 表中存在的列。
+ （可选）您可以提供 Amazon RDS MySQL 到 Amazon Redshift 列数据类型映射，作为模板中的参数之一。如果指定此项，则脚本将用它来创建 Amazon Redshift 表。

如果使用的是 `Overwrite_Existing` Amazon Redshift 插入模式：
+ 如果未提供分配键，则将使用 Amazon RDS MySQL 表上的主键。
+ 如果表上有复合主键，则在未提供分配键时，将第一个复合主键用作分配键。仅将第一个复合键设置为 Amazon Redshift 表中的主键。
+ 如果未提供分配键并且 Amazon RDS MySQL 表上没有主键，则复制操作将失败。

有关 Amazon Redshift 的更多信息，请参阅以下主题：
+ [Amazon Redshift 集群](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-security-groups.html)
+ Amazon Redshift [COPY](https://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html)
+ [分配方式](https://docs.aws.amazon.com/redshift/latest/dg/c_choosing_dist_sort.html)和 DISTKEY [示例](https://docs.aws.amazon.com/redshift/latest/dg/c_Distribution_examples.html)
+ [排序键](https://docs.aws.amazon.com/redshift/latest/dg/t_Sorting_data.html)

下表介绍了脚本如何转换数据类型：


**MySQL 与 Amazon Redshift 之间的数据类型转换**  

| **MySQL 数据类型** | **Amazon Redshift 数据类型** | **备注** | 
| --- | --- | --- | 
|  TINYINT, TINYINT (size)  | SMALLINT |  MySQL：-128 至 127。可在括号中指定的最大位数。  亚马逊 Redshift:. INT2 有符号的二字节整数  | 
|  TINYINT UNSIGNED， TINYINT (size) UNSIGNED  | SMALLINT |  MySQL：0 到 255，无符号。可在括号中指定的最大位数。 亚马逊 Redshift:. INT2 有符号的二字节整数  | 
|  SMALLINT, SMALLINT(size)  | SMALLINT |  MySQL：-32768 到 32767 正常。可在括号中指定的最大位数。 亚马逊 Redshift:. INT2 有符号的二字节整数  | 
|  SMALLINT UNSIGNED， SMALLINT(size) UNSIGNED，  | INTEGER |  MySQL：0 到 65535，无符号\$1。可在括号中指定的最大位数 亚马逊 Redshift:. INT4 有符号的四字节整数  | 
|  MEDIUMINT, MEDIUMINT(size)  | INTEGER |  MySQL：388608 至 8388607。可在括号中指定的最大位数 亚马逊 Redshift:. INT4 有符号的四字节整数  | 
|  MEDIUMINT UNSIGNED， MEDIUMINT(size) UNSIGNED  |  INTEGER  |  MySQL：0 至 16777215。可在括号中指定的最大位数 亚马逊 Redshift:. INT4 有符号的四字节整数  | 
|  INT, INT(size)  | INTEGER |  MySQL：147483648 至 2147483647 亚马逊 Redshift:. INT4 有符号的四字节整数  | 
|  INT UNSIGNED， INT(size) UNSIGNED  | BIGINT |  MySQL：0 至 4294967295 亚马逊 Redshift:. INT8 有符号的八字节整数  | 
|  BIGINT BIGINT(size)  | BIGINT |  亚马逊 Redshift:. INT8 有符号的八字节整数  | 
|  BIGINT UNSIGNED BIGINT(size) UNSIGNED  | VARCHAR(20\$14) |  MySQL：0 至 18446744073709551615  Amazon Redshift：无本地等效类型，因此使用字符数组。  | 
|  FLOAT FLOAT(size,d) FLOAT(size,d) UNSIGNED  | REAL |  可在 size 参数中指定的最大位数。d 参数指定小数点右侧的最大位数。 亚马逊 Redshift： FLOAT4  | 
|  DOUBLE(size,d)  | DOUBLE PRECISION |  可在 size 参数中指定的最大位数。d 参数指定小数点右侧的最大位数。 亚马逊 Redshift： FLOAT8  | 
| DECIMAL(size,d) |  DECIMAL(size,d)  |  DOUBLE 作为字符串存储，允许固定小数点。可在 size 参数中指定的最大位数。d 参数指定小数点右侧的最大位数。 Amazon Redshift：无本地等效类型。  | 
|  CHAR(size)  | VARCHAR(size\$14) |  保留固定长度字符串，可以包含字母、数字和特殊字符。固定大小指定为参数并用括号括起来。最多可存储 255 个字符。 右侧使用空格填补。 Amazon Redshift：CHAR 数据类型不支持多字节字符，因此使用 VARCHAR。 根据规定，每个字符的最大字节数为 4 [RFC3629](http://tools.ietf.org/html/rfc3629)，这会将字符表限制为 U\$110FFFF。  | 
| VARCHAR(size) | VARCHAR(size\$14) |  最多可存储 255 个字符。 VARCHAR 不支持以下无效的 UTF-8 代码点：0xd800-0xDFFF、（字节序列：ED A0 80-ED BF BF）、0x0xFDef、0xFFFE 和 0xFFFF，（字节序列：EF B7 90 FDD0-EF B7 AF、EF BF BE 和 EF BF BF）  | 
| TINYTEXT | VARCHAR(255\$14) | 存储最大长度为 255 个字符的字符串 | 
| TEXT | VARCHAR(max) |  存储最大长度为 65535 个字符的字符串。  | 
| MEDIUMTEXT | VARCHAR(max) |  0 到 16777215 个字符  | 
| LONGTEXT | VARCHAR(max) | 0 到 4294967295 个字符 | 
|  BOOLEAN BOOL TINYINT(1)  | BOOLEAN |  MySQL：这些类型是 [TINYINT (1)](http://dev.mysql.com/doc/refman/5.0/en/integer-types.html) 的同义词。值为零视为 false。非零值将视为 true。  | 
| BINARY[(M)] | varchar(255) |  M 是 0 到 255 字节，固定  | 
| VARBINARY(M) | VARCHAR(max) |  0-65,535 个字节  | 
| TINYBLOB | VARCHAR(255) | 0-255 个字节 | 
| BLOB | VARCHAR(max) |  0-65,535 个字节  | 
| MEDIUMBLOB | VARCHAR(max) |  0-16,777,215 个字节  | 
| LONGBLOB | VARCHAR(max) |  0-4,294,967,295 个字节  | 
| ENUM | VARCHAR(255\$12) | 这不是对文本枚举字符串长度的限制，而是在表定义上对枚举值数量的限制。 | 
| SET | VARCHAR(255\$12) | 类似于枚举。 | 
| DATE | DATE |  (YYYY-MM-DD) “1000-01-01”到“9999-12-31”  | 
| TIME | VARCHAR(10\$14) |  (hh:mm:ss) “-838-59-59”到“838-59-59”  | 
| DATETIME | TIMESTAMP |  (YYYY-MM-DD hh: mm: ss) “1000-01-01 00:00:00”到“9999-12-31 23:59:59”  | 
| TIMESTAMP | TIMESTAMP |  (YYYYMMDDhhmmss) 19700101000000 到 2037\$1  | 
| YEAR | VARCHAR(4\$14) |  (YYYY) 1900 到 2155  | 
|  column SERIAL  |  ID 生成/OLAP 数据仓库不需要此属性，因为会复制此列。 SERIAL 关键字在转换时不添加。  |  SERIAL 实际上是名为 SEQUENCE 的实体。它独立于您的表的其余部分存在。 column GENERATED BY DEFAULT 等效于： CREATE SEQUENCE name; CREATE TABLE table ( column INTEGER NOT NULL DEFAULT nextval(name) );  | 
| column BIGINT UNSIGNED NOT NULL AUTO\$1INCREMENT UNIQUE |  ID 生成/OLAP 数据仓库不需要此属性，因为会复制此列。 因此，SERIAL 关键字在转换时不添加。  |  SERIAL 实际上是名为 SEQUENCE 的实体。它独立于您的表的其余部分存在。 column GENERATED BY DEFAULT 等效于： CREATE SEQUENCE name; CREATE TABLE table ( column INTEGER NOT NULL DEFAULT nextval(name) );  | 
| ZEROFILL | ZEROFILL 关键字在转换时不添加。 |  INT UNSIGNED ZEROFILL NOT NULL ZEROFILL 用零填补字段的显示值，直至达到在列定义中指定的显示宽度。超过此显示宽度的值不截断。请注意，使用 ZEROFILL 还表示 UNSIGNED。  | 