AWS Data Pipeline 不再向新客户提供。的现有客户 AWS Data Pipeline 可以继续照常使用该服务。了解更多
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Amazon RDS 到 Amazon Redshift 模板
以下两个模板使用转换脚本,将表从 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 COPY
下表介绍了脚本如何转换数据类型:
MySQL 数据类型 | Amazon Redshift 数据类型 | 备注 |
---|---|---|
TINYINT, TINYINT (size) |
SMALLINT |
MySQL:-128 至 127。可在括号中指定的最大位数。 Amazon Redshift: INT2. 有符号的二字节整数 |
TINYINT UNSIGNED, TINYINT (size) UNSIGNED |
SMALLINT |
MySQL:0 到 255,无符号。可在括号中指定的最大位数。 Amazon Redshift: INT2. 有符号的二字节整数 |
SMALLINT, SMALLINT(size) |
SMALLINT |
MySQL:-32768 到 32767 正常。可在括号中指定的最大位数。 Amazon Redshift: INT2. 有符号的二字节整数 |
SMALLINT UNSIGNED, SMALLINT(size) UNSIGNED, |
INTEGER |
MySQL:0 到 65535,无符号*。可在括号中指定的最大位数 Amazon Redshift: INT4. 有符号的四字节整数 |
MEDIUMINT, MEDIUMINT(size) |
INTEGER |
MySQL:388608 至 8388607。可在括号中指定的最大位数 Amazon Redshift: INT4. 有符号的四字节整数 |
MEDIUMINT UNSIGNED, MEDIUMINT(size) UNSIGNED |
INTEGER |
MySQL:0 至 16777215。可在括号中指定的最大位数 Amazon Redshift: INT4. 有符号的四字节整数 |
INT, INT(size) |
INTEGER |
MySQL:147483648 至 2147483647 Amazon Redshift: INT4. 有符号的四字节整数 |
INT UNSIGNED, INT(size) UNSIGNED |
BIGINT |
MySQL:0 至 4294967295 Amazon Redshift: INT8. 有符号的八字节整数 |
BIGINT BIGINT(size) |
BIGINT |
Amazon Redshift: INT8. 有符号的八字节整数 |
BIGINT UNSIGNED BIGINT(size) UNSIGNED |
VARCHAR(20*4) |
MySQL:0 至 18446744073709551615 Amazon Redshift:无本地等效类型,因此使用字符数组。 |
FLOAT FLOAT(size,d) FLOAT(size,d) UNSIGNED |
REAL |
可在 size 参数中指定的最大位数。d 参数指定小数点右侧的最大位数。 Amazon Redshift: FLOAT4 |
DOUBLE(size,d) |
DOUBLE PRECISION |
可在 size 参数中指定的最大位数。d 参数指定小数点右侧的最大位数。 Amazon Redshift: FLOAT8 |
DECIMAL(size,d) |
DECIMAL(size,d) |
DOUBLE 作为字符串存储,允许固定小数点。可在 size 参数中指定的最大位数。d 参数指定小数点右侧的最大位数。 Amazon Redshift:无本地等效类型。 |
CHAR(size) |
VARCHAR(size*4) |
保留固定长度字符串,可以包含字母、数字和特殊字符。固定大小指定为参数并用括号括起来。最多可存储 255 个字符。 右侧使用空格填补。 Amazon Redshift:CHAR 数据类型不支持多字节字符,因此使用 VARCHAR。 根据 RFC3629 |
VARCHAR(size) | VARCHAR(size*4) |
最多可存储 255 个字符。 VARCHAR 不支持以下无效 UTF-8 代码点:0xD800 - 0xDFFF,(字节序列:ED A0 80 - ED BF BF),0xFDD0 - 0xFDEF,0xFFFE 和 0xFFFF,(字节序列:EF B7 90 - EF B7 AF,EF BF BE 和 EF BF BF) |
TINYTEXT | VARCHAR(255*4) | 存储最大长度为 255 个字符的字符串 |
TEXT | VARCHAR(max) |
存储最大长度为 65535 个字符的字符串。 |
MEDIUMTEXT | VARCHAR(max) |
0 到 16777215 个字符 |
LONGTEXT | VARCHAR(max) | 0 到 4294967295 个字符 |
BOOLEAN BOOL TINYINT(1) |
BOOLEAN |
MySQL:这些类型是 TINYINT (1) |
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*2) | 这不是对文本枚举字符串长度的限制,而是在表定义上对枚举值数量的限制。 |
SET | VARCHAR(255*2) | 类似于枚举。 |
DATE | DATE |
(YYYY-MM-DD) “1000-01-01”到“9999-12-31” |
TIME | VARCHAR(10*4) |
(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+ |
YEAR | VARCHAR(4*4) |
(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_INCREMENT 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。 |