ソース RDS データベースへのデータの追加とクエリ - Amazon Relational Database Service

ソース RDS データベースへのデータの追加とクエリ

Amazon RDS から Amazon Redshift にデータをレプリケートするゼロ ETL 統合の作成を終了するには、ターゲット送信先にデータベースを作成する必要があります。

Amazon Redshift と接続するため、Amazon Redshift クラスターまたはワークグループに接続し、統合識別子を参照してデータベースを作成します。これで、ソースの RDS データベースにデータを追加でき、Amazon Redshift または Amazon SageMaker で複製されることが確認できます。

ターゲットデータベースの作成

Amazon Redshift へのデータの複製を開始する前に、統合を作成後、データベースをターゲットのデータウェアハウスに作成する必要があります。このデータベースには、統合識別子への参照が含まれている必要があります。Amazon Redshift コンソールまたはクエリエディタ v2 を使用して、データベースを作成することができます。

デスティネーションデータベースを作成する手順については、「Amazon Redshift にデスティネーションデータベースを作成する」を参照してください。

ソースデータベースへのデータの追加

統合を設定した後で、データウェアハウスにレプリケートするデータを、ソースの RDS データベースに入力できます。

注記

Amazon RDS のデータ型とターゲット分析ウェアハウスには違いがあります。データ型マッピングの表については、「RDS データベースと Amazon Redshift データベース間のデータタイプの相違点」を参照してください。

まず、任意の MySQL クライアントを使用して、ソースデータベースに接続します。手順については、「MySQL DB インスタンスへの接続」を参照してください。

次に、テーブルを作成し、1 行のサンプルデータを挿入します。

重要

テーブルにプライマリキーがあることを確認してください。そうしないと、ターゲットのデータウェアハウスに複製できません。

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 コンソールに移動し、左側のナビゲーションペインから [クエリエディタ v2] を選択します。

  2. クラスターまたはワークグループに接続し、ドロップダウンメニュー (この例では destination_database) から送信先データベース (統合から作成したもの) を選択します。デスティネーションデータベースを作成する手順については、「Amazon Redshift にデスティネーションデータベースを作成する」を参照してください。

  3. SELECT ステートメントを使用してデータをクエリします。この例では、次のコマンドを実行して、ソースの RDS データベースで作成したテーブルからすべてのデータを選択します。

    SELECT * from my_db."books_table";
    クエリエディタ内で SELECT ステートメントを実行します。結果は、Amazon RDS データベースに追加されたサンプルデータの 1 行です。
    • 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_case_sensitive_identifier」を参照してください。

RDS データベースと Amazon Redshift データベース間のデータタイプの相違点

以下の表は、RDS for MySQL、RDS for PostgreSQL、RDS for Oracle のデータタイプおよび対応する送信先のデータタイプのマッピングを示しています。Amazon RDS は現在、ゼロ ETL 統合ではこれらのデータ型のみをサポートしています。

ソースデータベースのテーブルにサポートされていないデータ型が含まれている場合、そのテーブルは同期されず、送信先ターゲットで使用できなくなります。ソースからターゲットへのストリーミングは継続されますが、サポートされていないデータ型のテーブルは使用できません。テーブルを修正してターゲット送信先で使用できるようにするには、変更内容を手動で元に戻し、ALTER DATABASE...INTEGRATION REFRESH を実行して統合を更新する必要があります。

注記

Amazon SageMaker Lakehouse とのゼロ 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(65,535) 最大 65,535 文字の可変長文字列値 なし
TINYTEXT VARCHAR(255) 最大 255 文字の可変長文字列値 なし
MEDIUMTEXT VARCHAR(65,535) 最大 65,535 文字の可変長文字列値 なし
LONGTEXT VARCHAR(65,535) 最大 65,535 文字の可変長文字列値 なし
ENUM VARCHAR(1,020) 最大 1,020 文字の可変長文字列値 なし
SET VARCHAR(1,020) 最大 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 データタイプ 説明 制限事項
array 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(65,535) 最大 65,535 文字の可変長文字列値 なし
cid BIGINT

符号付き 8 バイト整数

なし
cidr

VARCHAR(19)

最大 19 文字の可変長文字列値

なし
date DATE カレンダー日付 (年、月、日)

294,276 A.D. より大きい値はサポートされません

double precision DOUBLE PRECISION 倍精度浮動小数点数 非正規値は完全にはサポートされません

gtsvector

VARCHAR(65,535)

最大 65,535 文字の可変長文字列値

なし
inet

VARCHAR(19)

最大 19 文字の可変長文字列値

なし
integer INTEGER 符号付き 4 バイト整数 なし

int2vector

SUPER 値としての半構造化データまたはドキュメント。 なし
interval INTERVAL 期間 year to month 修飾子または day to second 修飾子を指定する INTERVAL タイプのみがサポートされます。
json SUPER 値としての半構造化データまたは文書 なし
JSONB SUPER 値としての半構造化データまたは文書 なし
jsonpath VARCHAR(65,535) 最大 65,535 文字の可変長文字列値 なし

macaddr

VARCHAR(17) 最大 17 文字の可変長文字列値 なし

macaddr8

VARCHAR(23) 最大 23 文字の可変長文字列値 なし
money DECIMAL(20,3) 通貨額 なし
名前 VARCHAR(64) 最大 64 文字の可変長文字列値 なし
numeric(p,s) DECIMAL(p,s) ユーザー定義の固定精度値
  • NaN 値はサポートされていません

  • 精度とスケールは明示的に定義し、38 (精度) と 37 (スケール) 以下にする必要があります。

  • 負のスケールはサポートされていません

oid BIGINT 符号付き 8 バイト整数 なし
oidvector SUPER 値としての半構造化データまたはドキュメント。 なし
pg_brin_bloom_summary VARCHAR(65,535) 最大 65,535 文字の可変長文字列値 なし
pg_dependencies VARCHAR(65,535) 最大 65,535 文字の可変長文字列値 なし
pg_lsn VARCHAR(17) 最大 17 文字の可変長文字列値 なし
pg_mcv_list VARCHAR(65,535) 最大 65,535 文字の可変長文字列値 なし
pg_ndistinct VARCHAR(65,535) 最大 65,535 文字の可変長文字列値 なし
pg_node_tree VARCHAR(65,535) 最大 65,535 文字の可変長文字列値 なし
pg_snapshot VARCHAR(65,535) 最大 65,535 文字の可変長文字列値 なし
real REAL 単精度浮動小数点数 非正規値は完全にはサポートされません
refcursor VARCHAR(65,535) 最大 65,535 文字の可変長文字列値 なし
smallint SMALLINT 符号付き 2 バイト整数 なし
smallserial SMALLINT 符号付き 2 バイト整数 なし
シリアル INTEGER 符号付き 4 バイト整数 なし
text VARCHAR(65,535) 最大 65,535 文字の可変長文字列値 なし
tid VARCHAR(23) 最大 23 文字の可変長文字列値 なし
time [(p)] without time zone VARCHAR(19) 最大 19 文字の可変長文字列値 Infinity および -Infinity 値はサポートされていません
time [(p)] with time zone VARCHAR(22) 最大 22 文字の可変長文字列値 Infinity および -Infinity 値はサポートされていません
timestamp [(p)] without time zone TIMESTAMP 日付と時刻 (タイムゾーンなし)
  • Infinity および -Infinity 値はサポートされていません

  • サポートされていない 9999-12-31 より大きい値

  • B.C. 値はサポートされていません

timestamp [(p)] with time zone TIMESTAMPTZ 日付と時刻 (タイムゾーンあり)
  • Infinity および -Infinity 値はサポートされていません

  • サポートされていない 9999-12-31 より大きい値

  • B.C. 値はサポートされていません

tsquery VARCHAR(65,535) 最大 65,535 文字の可変長文字列値 なし
tsvector VARCHAR(65,535) 最大 65,535 文字の可変長文字列値 なし
txid_snapshot VARCHAR(65,535) 最大 65,535 文字の可変長文字列値 なし
uuid VARCHAR(36) 可変長 36 文字の文字列 なし
xid BIGINT 符号付き 8 バイト整数 なし
xid8 DECIMAL(20, 0) 固定精度 10 進数 なし
xml VARCHAR(65,535) 最大 65,535 文字の可変長文字列値 なし

RDS for Oracle

サポートされていないデータタイプ

以下の RDS for Oracle データタイプは、Amazon Redshift ではサポートされていません。

  • 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 (長さ)。

スケールが 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 (s) — ソースタイムスタンプにゾーンオフセットが含まれている場合 (SQL Server や Oracle など)、insert または update 時に 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 (s) — ソースタイムスタンプにゾーンオフセットが含まれている場合 (SQL Server や Oracle など)、insert または update 時に UTC に変換される。オフセットが含まれていない場合、時刻は既に UTC に変換済みとみなされる。

スケールが 7 以上、9 以下の場合は VARCHAR (37)。

TIMESTAMP WITH TIME ZONE

長さが 1~65,535 の場合は VARCHAR (バイト単位の長さ)。

長さが 65,536~2,147,483,647 の場合は VARCHAR (65535)。

タイムスタンプ現地時間帯あり

長さが 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 はテーブルを削除します。