Amazon RDS 到 Amazon Redshift 模板 - AWS Data Pipeline

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 的更多信息,请参阅以下主题:

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

MySQL 与 Amazon Redshift 之间的数据类型转换
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,每个字符的最大字节位数为 4,这将字符表限制为 U+10FFFF。

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) 的同义词。值为零视为 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*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。