將資料新增至來源 RDS 資料庫並進行查詢 - Amazon Relational Database Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

將資料新增至來源 RDS 資料庫並進行查詢

若要完成建立 零 ETL 整合,將資料從 Amazon RDS 複製到 Amazon Redshift,您必須在目標目的地中建立資料庫。

對於與 Amazon Redshift 的連線,連線到您的 Amazon Redshift 叢集或工作群組,並建立參考整合識別符的資料庫。然後,您可以將資料新增到來源 RDS 資料庫,並看到該資料在 Amazon Redshift 或 Amazon SageMaker 中複寫。

建立目標資料庫

在建立整合之後,您必須在目標資料倉儲中建立資料庫,然後才能開始將資料複寫到 Amazon Redshift。此資料庫必須包含整合識別符的參考。您可以使用 Amazon Redshift 主控台或查詢編輯器第 2 版來建立資料庫。

如需建立目的地資料庫的指示,請參閱在 Amazon Redshift 中建立目的地資料庫

將資料新增至來源資料庫

設定整合之後,您可以將要複寫至資料倉儲的資料填入來源 RDS 資料庫

注意

Amazon RDS 與目標分析倉儲中的資料類型之間存在差異。如需資料類型映射的資料表,請參閱 RDS 與 Amazon Redshift 資料庫之間的資料類型差異

首先,使用您選擇的 MySQL 用戶端連線到來源資料庫。如需說明,請參閱連線至您的 MySQL 資料庫執行個體

然後,建立資料表並插入一列範例資料。

重要

請確定資料表具有主索引鍵。否則,無法將其複寫到目標資料倉儲。

RDS for MySQL

下列範例使用 MySQL 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 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*Plus 連線至 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 資料。

將資料新增至 RDS 資料庫後,資料會複寫至目的地資料庫,並準備好進行查詢。

查詢複製的資料
  1. 導覽至 Amazon Redshift 主控台,然後從左側導覽窗格中選擇查詢編輯器第 2 版

  2. 連線到您的叢集或工作群組,然後從下拉式功能表中選擇您已從整合中建立的目的地資料庫 (在此範例中為 destination_database)。如需建立目的地資料庫的指示,請參閱在 Amazon Redshift 中建立目的地資料庫

  3. 使用 SELECT 陳述式查詢您的資料。在此範例中,您可以執行下列命令,從您在來源 RDS 資料庫中建立的資料表中選取所有資料:

    SELECT * from my_db."books_table";
    在查詢編輯器中執行 SELECT 陳述式。結果是新增至 Amazon RDS 資料庫的單一範例資料列。
    • my_dbRDS 資料庫結構描述名稱。

    • books_tableRDS 資料表名稱。

您也可以使用命令列用戶端查詢資料。例如:

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_case_sensitive_identifier

RDS 與 Amazon Redshift 資料庫之間的資料類型差異

下表顯示 RDS for MySQL、RDS for PostgreSQL 和 RDS for Oracle 的映射資料類型與對應目的地資料類型。Amazon RDS 目前僅支援這些資料類型進行零 ETL 整合。

如果來源資料庫中的資料表包含不受支援的資料類型,則資料表不同步,而且目的地目標無法取用該資料表。從來源到目標的串流會繼續進行,但是無法使用其中資料類型不受支援的資料表。若要修正資料表並使其可在目標目的地中使用,您必須手動還原重大變更,然後執行 ALTER DATABASE...INTEGRATION REFRESH 以重新整理整合。

注意

您無法重新整理與 Amazon SageMaker 資料湖倉的零 ETL 整合。相反地,請刪除並嘗試再次建立整合。

RDS for MySQL

RDS for MySQL 資料類型 目標資料類型 描述 限制
INT INTEGER 帶正負號的 4 位元組整數
SMALLINT SMALLINT 帶正負號的 2 位元組整數
TINYINT SMALLINT 帶正負號的 2 位元組整數
MEDIUMINT INTEGER 帶正負號的 4 位元組整數
BIGINT BIGINT 帶正負號的 8 位元組整數
INT UNSIGNED BIGINT 帶正負號的 8 位元組整數
TINYINT UNSIGNED SMALLINT 帶正負號的 2 位元組整數
MEDIUMINT UNSIGNED INTEGER 帶正負號的 4 位元組整數
BIGINT UNSIGNED DECIMAL(20,0) 可選擇精確度 (有效位數) 的精確數值
DECIMAL(p,s) = NUMERIC(p,s) DECIMAL(p,s) 可選擇精確度 (有效位數) 的精確數值

不支援大於 38 的精確度和大於 37 的小數位數

DECIMAL(p,s) UNSIGNED = NUMERIC(p,s) UNSIGNED DECIMAL(p,s) 可選擇精確度 (有效位數) 的精確數值

不支援大於 38 的精確度和大於 37 的小數位數

FLOAT4/REAL REAL 單精度浮點數
FLOAT4/REAL UNSIGNED REAL 單精度浮點數
DOUBLE/REAL/FLOAT8 DOUBLE PRECISION 雙精度浮點數
DOUBLE/REAL/FLOAT8 UNSIGNED DOUBLE PRECISION 雙精度浮點數
BIT(n) VARBYTE(8) 可變長度二進位值
BINARY(n) VARBYTE(n) 可變長度二進位值
VARBINARY(n) VARBYTE(n) 可變長度二進位值
CHAR(n) VARCHAR(n) 可變長度字串值
VARCHAR(n) VARCHAR(n) 可變長度字串值
TEXT VARCHAR(65535) 可變長度字串值最多 65,535 個字元
TINYTEXT VARCHAR(255) 可變長度字串值最多 255 個字元
MEDIUMTEXT VARCHAR(65535) 可變長度字串值最多 65,535 個字元
LONGTEXT VARCHAR(65535) 可變長度字串值最多 65,535 個字元
ENUM VARCHAR(1020) 可變長度字串值最多 1,020 個字元
SET VARCHAR(1020) 可變長度字串值最多 1,020 個字元
DATE DATE 日曆日期 (年、月、日)
DATETIME TIMESTAMP 日期和時間 (未使用時區)
TIMESTAMP(p) TIMESTAMP 日期和時間 (未使用時區)
TIME VARCHAR(18) 可變長度字串值最多 18 個字元
YEAR VARCHAR(4) 可變長度字串值最多 4 個字元
JSON SUPER 半結構化資料或文件作為值

RDS for PostgreSQL

RDS for PostgreSQL 的零 ETL 整合不支援自訂資料類型或擴充功能建立的資料類型。

RDS for PostgreSQL 資料類型 Amazon Redshift 資料類型 描述 限制
陣列 SUPER 半結構化資料或文件作為值
bigint BIGINT 帶正負號的 8 位元組整數
bigserial BIGINT 帶正負號的 8 位元組整數
bit varying(n) VARBYTE(n) 可變長度字串值最多 16,777,216 個位元組
bit(n) VARBYTE(n) 可變長度字串值最多 16,777,216 個位元組
bit、bit varying VARBYTE(16777216) 可變長度字串值最多 16,777,216 個位元組
boolean BOOLEAN 邏輯布林值 (true/false)
bytea VARBYTE(16777216) 可變長度字串值最多 16,777,216 個位元組
char(n) CHAR(n) 固定長度字元字串值最多 65,535 個位元組
char varying(n) VARCHAR(65535) 可變長度字元字串值最多 65,535 個字元
cid BIGINT

帶正負號的 8 位元組整數

cidr

VARCHAR(19)

可變長度字串值最多 19 個字元

date DATE 日曆日期 (年、月、日)

不支援大於 294,276 A.D. 的值

double precision DOUBLE PRECISION 雙精度浮點數 未完全支援的低於正常值

gtsvector

VARCHAR(65535)

可變長度字串值最多 65,535 個字元

inet

VARCHAR(19)

可變長度字串值最多 19 個字元

integer INTEGER 帶正負號的 4 位元組整數

int2vector

SUPER 半結構化資料或文件作為值。
間隔 INTERVAL 持續時間 僅支援指定 year to month 或 day to second 限定詞的 INTERVAL 類型。
json SUPER 半結構化資料或文件作為值
jsonb SUPER 半結構化資料或文件作為值
jsonpath VARCHAR(65535) 可變長度字串值最多 65,535 個字元

macaddr

VARCHAR(17) 可變長度字串值最多 17 個字元

macaddr8

VARCHAR(23) 可變長度字串值最多 23 個字元
money DECIMAL(20,3) 貨幣金額
name VARCHAR(64) 可變長度字串值最多 64 個字元
numeric(p,s) DECIMAL(p,s) 使用者定義的固定精確度值
  • 不支援 NaN

  • 精確度和小數位數必須明確定義,且不可大於 38 (精確度) 和 37 (小數位數)

  • 不支援負小數位數

oid BIGINT 帶正負號的 8 位元組整數
類別向量 SUPER 半結構化資料或文件作為值。
pg_brin_bloom_summary VARCHAR(65535) 可變長度字串值最多 65,535 個字元
pg_dependencies VARCHAR(65535) 可變長度字串值最多 65,535 個字元
pg_lsn VARCHAR(17) 可變長度字串值最多 17 個字元
pg_mcv_list VARCHAR(65535) 可變長度字串值最多 65,535 個字元
pg_ndistinct VARCHAR(65535) 可變長度字串值最多 65,535 個字元
pg_node_tree VARCHAR(65535) 可變長度字串值最多 65,535 個字元
pg_snapshot VARCHAR(65535) 可變長度字串值最多 65,535 個字元
real REAL 單精度浮點數 未完全支援的低於正常值
refcursor VARCHAR(65535) 可變長度字串值最多 65,535 個字元
smallint SMALLINT 帶正負號的 2 位元組整數
smallserial SMALLINT 帶正負號的 2 位元組整數
serial INTEGER 帶正負號的 4 位元組整數
text VARCHAR(65535) 可變長度字串值最多 65,535 個字元
tid VARCHAR(23) 可變長度字串值最多 23 個字元
不含時區的時間 [(p)] VARCHAR(19) 可變長度字串值最多 19 個字元 不支援 Infinity-Infinity
含時區的時間 [(p)] VARCHAR(22) 可變長度字串值最多 22 個字元 不支援 Infinity-Infinity
不含時區的時間戳記 [(p)] TIMESTAMP 日期和時間 (未使用時區)
  • 不支援 Infinity-Infinity

  • 不支援大於 9999-12-31 的值

  • 不支援 B.C. 值

含時區的時間戳記 [(p)] TIMESTAMPTZ 日期和時間 (包含時區)
  • 不支援 Infinity-Infinity

  • 不支援大於 9999-12-31 的值

  • 不支援 B.C. 值

tsquery VARCHAR(65535) 可變長度字串值最多 65,535 個字元
tsvector VARCHAR(65535) 可變長度字串值最多 65,535 個字元
txid_snapshot VARCHAR(65535) 可變長度字串值最多 65,535 個字元
uuid VARCHAR(36) 可變長度 36 個字元字串
xid BIGINT 帶正負號的 8 位元組整數
xid8 DECIMAL(20, 0) 固定精確度小數位數
xml VARCHAR(65535) 可變長度字串值最多 65,535 個字元

RDS for Oracle

不受支援的資料類型

Amazon Redshift 不支援下列 RDS for Oracle 資料類型:

  • ANYDATA

  • BFILE

  • REF

  • ROWID

  • UROWID

  • VARRAY

  • SDO_GEOMETRY

  • 使用者定義的資料類型

資料類型差異

下表顯示當 RDS for Oracle 是來源且 Amazon Redshift 是目標時,影響零 ETL 整合的資料類型差異。

RDS for Oracle 資料類型 Amazon Redshift 資料類型

BINARY_FLOAT

FLOAT4

BINARY_DOUBLE

FLOAT8

BINARY

VARCHAR (長度)

FLOAT (P)

如果精確度 =< 24,則為 FLOAT4。

如果精確度 > 24,則為 FLOAT8。

NUMBER (P,S)

如果小數位數 => 0 且 =< 37,則為 NUMERIC (p,s)。

如果小數位數 => 38 且 =< 127,則為 VARCHAR (Length)。

如果小數位數為 0:

  • 且精確度小於或等於 2 時,則為 INT2。

  • 且精確度大於 2 及小於或等於 4 時,則為 INT2。

  • 且精確度大於 4 及小於或等於 9 時,則為 INT4。

  • 且精確度大於 9 時,則為 NUMERIC (p,s)。

  • 且精確度大於或等於小數位數時,則為 NUMERIC (p,s)。

如果小數位數小於 0,則為 INT8。

DATE

如果小數位數為 => 0 和 =< 6 (取決於 Redshift 目標欄類型),則為以下其中之一:

  • TIMESTAMP (s)

  • TIMESTAMPTZ — 如果來源時間戳記包含區域偏移量 (例如在 SQL Server 或 Oracle 中),則會在插入/更新時轉換為 UTC。如果不包含偏移量,則時間會視為已是 UTC。

如果小數位數 => 7 且 =< 9,則為 VARCHAR (37)。

INTERVAL_YEAR TO MONTH

如果長度是 1–65,535,則為 VARCHAR (長度為位元組)。

如果長度是 65,536–2,147,483,647,則為 VARCHAR (65535)。

INTERVAL_DAY TO SECOND

如果長度是 1–65,535,則為 VARCHAR (長度為位元組)。

如果長度是 65,536–2,147,483,647,則為 VARCHAR (65535)。

TIMESTAMP

如果小數位數為 => 0 和 =< 6 (取決於 Redshift 目標欄類型),則為以下其中之一:

  • TIMESTAMP (s)

  • TIMESTAMPTZ — 如果來源時間戳記包含區域偏移量 (例如在 SQL Server 或 Oracle 中),則會在插入/更新時轉換為 UTC。如果不包含偏移量,則時間會視為已是 UTC。

如果小數位數 => 7 且 =< 9,則為 VARCHAR (37)。

TIMESTAMP WITH TIME ZONE

如果長度是 1–65,535,則為 VARCHAR (長度為位元組)。

如果長度是 65,536–2,147,483,647,則為 VARCHAR (65535)。

TIMESTAMP WITH LOCAL TIME ZONE

如果長度是 1–65,535,則為 VARCHAR (長度為位元組)。

如果長度是 65,536–2,147,483,647,則為 VARCHAR (65535)。

CHAR

如果長度是 1–65,535,則為 VARCHAR (長度為位元組)。

如果長度是 65,536–2,147,483,647,則為 VARCHAR (65535)。

VARCHAR2

當長度大於 4,000 個位元組時,則為 VARCHAR (LOB 大小上限)。LOB 大小上限不能超過 63 KB。Amazon Redshift 不支援大於 64 KB 的 VARCHAR。

當長度為 4,000 個位元組或更少時,則為 VARCHAR (長度為位元組)。

NCHAR

如果長度是 1–65,535,則為 NVARCHAR (長度為位元組)。

如果長度是 65,536–2,147,483,647,則為 NVARCHAR (65535)。

NVARCHAR2

當長度大於 4,000 個位元組時,則為 NVARCHAR (LOB 大小上限)。LOB 大小上限不能超過 63 KB。Amazon Redshift 不支援大於 64 KB 的 VARCHAR。

當長度為 4,000 個位元組或更少時,則為 NVARCHAR (長度為位元組)。

RAW

VARCHAR (長度)

REAL

FLOAT8

BLOB

VARCHAR (LOB 大小上限 * 2)

LOB 大小上限不能超過 31 KB。Amazon Redshift 不支援大於 64 KB 的 VARCHAR。

CLOB

VARCHAR (LOB 大小上限)

LOB 大小上限不能超過 63 KB。Amazon Redshift 不支援大於 64 KB 的 VARCHAR。

NCLOB

NVARCHAR (LOB 大小上限)

LOB 大小上限不能超過 63 KB。Amazon Redshift 不支援大於 64 KB 的 VARCHAR。

LONG

VARCHAR (LOB 大小上限)

LOB 大小上限不能超過 63 KB。Amazon Redshift 不支援大於 64 KB 的 VARCHAR。

LONG RAW

VARCHAR (LOB 大小上限 * 2)

LOB 大小上限不能超過 31 KB。Amazon Redshift 不支援大於 64 KB 的 VARCHAR。

XMLTYPE

VARCHAR (LOB 大小上限)

LOB 大小上限不能超過 63 KB。Amazon Redshift 不支援大於 64 KB 的 VARCHAR。

RDS for PostgreSQL 的 DDL 操作

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 仍有重要的差異。下列各節概述常見 DDL 操作的 Amazon Redshift 系統回應。

資料庫操作

下表顯示資料庫 DDL 操作的系統回應。

DDL 操作 Redshift 系統回應
CREATE DATABASE 無操作
DROP DATABASE Amazon Redshift 會捨棄目標 Redshift 資料庫中的所有資料。
RENAME DATABASE Amazon Redshift 會捨棄原始目標資料庫中的所有資料,並重新同步新目標資料庫中的資料。如果新的資料庫不存在,您必須手動建立資料庫。如需指示,請參閱在 Amazon Redshift 中建立目的地資料庫

結構描述操作

下表顯示結構描述 DDL 操作的系統回應。

DDL 操作 Redshift 系統回應
CREATE SCHEMA 無操作
DROP SCHEMA Amazon Redshift 會捨棄原始結構描述。
RENAME SCHEMA Amazon Redshift 會捨棄原始結構描述,然後重新同步新結構描述中的資料。

資料表操作

下表顯示資料表 DDL 操作的系統回應。

DDL 操作 Redshift 系統回應
CREATE TABLE

Amazon Redshift 會建立資料表。

有些操作會導致資料表建立失敗,例如在沒有主索引鍵的情況下建立資料表,或執行宣告式分割。如需詳細資訊,請參閱限制針對 Amazon RDS 零 ETL 整合進行疑難排解

DROP TABLE Amazon Redshift 會捨棄資料表。
TRUNCATE TABLE Amazon Redshift 會截斷資料表。
ALTER TABLE (RENAME...) Amazon Redshift 會重新命名資料表或資料欄。
ALTER TABLE (SET SCHEMA)

Amazon Redshift 會捨棄原始結構描述中的資料表,然後重新同步新結構描述中的資料表。

ALTER TABLE (ADD PRIMARY KEY) Amazon Redshift 會新增主索引鍵並重新同步資料表。
ALTER TABLE (ADD COLUMN) Amazon Redshift 會將資料欄新增至資料表。
ALTER TABLE (DROP COLUMN)

如果資料欄不是主索引鍵資料欄,Amazon Redshift 會加以捨棄。否則,它會重新同步資料表。

ALTER TABLE (SET LOGGED/UNLOGGED) 如果您將資料表變更為已記錄,Amazon Redshift 會重新同步資料表。如果您將資料表變更為未記錄,Amazon Redshift 會捨棄資料表。