このページでは、Cloud Data Fusion で Amazon Redshift インスタンスから Google Cloud にデータを読み込む方法について説明します。Redshift ソースコネクタによって、Redshift データセットから BigQuery などの宛先にテーブルを同期できます。このコネクタによって、構成可能な SQL クエリを作成することもできます。
始める前に
- Cloud Data Fusion バージョン 6.9.0 以降では、Redshift ソースがサポートされています。
Redshift ソースコネクタを構成する際には、既存の再利用可能な接続を選択するか、新しい 1 回限りの接続を作成できます。詳細については、接続を管理するをご覧ください。接続を再利用する場合は、次の点に注意してください。
- 認証情報を提供する必要はありません。
- 既存の接続には、インポート クエリの生成に使用されるスキーマとテーブル名の情報が用意されています。
プラグインを構成する
Cloud Data Fusion ウェブ インターフェースに移動し、[Studio] をクリックします。
[Realtime] ではなく、[Data Pipeline - Batch] が選択されていることを確認します。
[ソース] メニューで、[Redshift] をクリックします。パイプラインに Redshift ノードが表示されます。[Studio] ページに Redshift ソースが表示されない場合は、Cloud Data Fusion Hub から Redshift ソースコネクタをデプロイします。
ソースを構成するには、Redshift ノードに移動して [プロパティ] をクリックします。
次のプロパティを入力します。完全版リストについては、プロパティをご覧ください。
- BigQuery ノードのラベルを入力します(例:
Redshift tables
)。 接続の詳細を入力します。新しい 1 回限りの接続または再利用可能な既存接続を設定できます。
新しい接続
Redshift に 1 回限りの接続を追加するには、次の手順に従います。
- [接続を使用] をオフのままにします。
- [JDBC ドライバ名] フィールドに、ドライバの名前を入力します。Redshift では、CData と Amazon の 2 種類の JDBC ドライバがサポートされています。詳細については、JDBC ドライバをアップロードするをご覧ください。
- [ホスト] フィールドに、Redshift クラスタのエンドポイント(例:
cdf-redshift-new.example-endpoint.eu-west-1.redshift.amazonaws.com
)を入力します。 - 省略可: [ポート] フィールドに、データベースのポート番号(例:
5439
)を入力します。 Redshift データベースで認証が必要な場合は、次のようにします。
- [ユーザー名] フィールドに、データベースの名前を入力します。
- [パスワード] フィールドに、データベースのパスワードを入力します。
- 省略可: [引数] フィールドに、Key-Value の引数を入力します。CData ドライバを使用するには、RTK や OEMKey などの接続引数を指定します(該当する場合)。
- [名前] フィールドに名前を入力します(例:
SN-PC-Source-01-01-2024
)。 - [データベース] フィールドにターゲット データベース名を入力します(例:
datafusiondb
)。
再利用可能な接続
既存の接続を再利用する手順は次のとおりです。
- [接続を使用] をオンにします。
- [接続を参照] をクリックします。
接続名をクリックします。
省略可: 接続が存在せず、再利用可能な新しい接続を作成する場合は [接続を追加] をクリックし、本ページにある [新しい接続] タブの手順をご参照ください。
[クエリをインポート] フィールドに、Redshift ソースのスキーマとテーブル名を使用してクエリを入力します(例:
Select * from "public"."users"
)。省略可: 境界クエリや分割数などの [詳細] プロパティを入力します。プロパティの説明については、プロパティをご覧ください。
- BigQuery ノードのラベルを入力します(例:
省略可: [検証] をクリックして、見つかったエラーに対処します。
[
閉じる] をクリックします。プロパティは保存され、Cloud Data Fusion ウェブ インターフェースで引き続きデータ パイプラインを構築できます。
プロパティ
プロパティ | 自動化用のマクロに対応する | 必須プロパティ | Description |
---|---|---|---|
ラベル | × | ○ | データ パイプラインのノードの名前。 |
接続を使用 | × | いいえ | ソースへの接続を参照します。[接続を使用] がオンになっている場合、認証情報を提供する必要はありません。 |
接続 | ○ | はい | 使用する接続の名前。 [接続を使用] が選択されている場合、このフィールドが表示されます。データベースとテーブルの情報は、接続によって提供されます。 |
JDBC ドライバ名 | はい | はい | 使用する JDBC ドライバの名前。[接続を使用] が選択されていない場合は、このフィールドが表示されます。 |
ホスト | はい | はい | Amazon Redshift クラスタのエンドポイント。[接続を使用] が選択されていない場合は、このフィールドが表示されます。 |
ポート | はい | いいえ | Redshift が実行されているポート。[接続を使用] が選択されていない場合は、このフィールドが表示されます。 |
Username | はい | いいえ | 指定したデータベースに接続するためのユーザー ID。[接続を使用] が選択されていない場合は、このフィールドが表示されます。 |
Password | はい | いいえ | 指定したデータベースへの接続に使用するパスワード。[接続を使用] が選択されていない場合は、このフィールドが表示されます。 |
接続引数 | はい | いいえ | 接続引数としての任意の文字列の Key-Value ペアのリスト。これらの引数は、追加の構成が必要な JDBC ドライバの接続引数として JDBC ドライバに渡されます。[接続を使用] が選択されていない場合は、このフィールドが表示されます。 |
参照名 | × | はい | このソースを、リネージ、メタデータのアノテーション、その他のサービスのために一意に識別します。 |
データベース | はい | はい | Redshift データベース名。データを選択するには、[データベースを参照] をクリックします。 |
クエリをインポート | はい | はい | 指定したテーブルからデータをインポートするために使用する SELECT クエリ。 |
境界クエリ | はい | いいえ | splitBy フィールドから最小値と最大値を返す SQL クエリ。例: SELECT MIN(id),MAX(id) FROM table 。numSplits が 1 に設定されている場合は不要です。 |
Split column | はい | いいえ | スプリットの生成に使用されるフィールド名。numSplits が 1 に設定されている場合は不要です。 |
スプリット数 | はい | いいえ | 生成するスプリット数。 |
サイズ | はい | いいえ | スプリットごとに一度にフェッチする行数。フェッチサイズを大きくすると、インポートが速くなりますが、その一方でメモリ使用量は高くなります。指定しない場合は、デフォルトの 1000 が使用されます。 |
データ型マッピング
次の表は、Redshift のデータ型と対応する CDAP の型を示しています。
Redshift のデータ型 | CDAP スキーマのデータ型 |
---|---|
bigint |
long |
boolean |
boolean |
character |
string |
character varying |
string |
date |
date |
double precision |
double |
geometry |
bytes |
hllsketch |
string |
integer |
int |
json |
string |
numeric (精度、スケール)/ decimal (精度、スケール) |
decimal |
精度 0 の numeric |
string |
real |
float |
smallint |
int |
super |
string |
text |
string |
time [ (p) ] タイムゾーンなし |
time |
time [ (p) ] タイムゾーンあり |
string |
timestamp [ (p) ] タイムゾーンなし |
timestamp |
timestamp [ (p) ] タイムゾーンあり |
timestamp |
varbyte |
byte |
xml |
string |
おすすめの方法
Google Cloud から Redshift クラスタに接続する場合は、次のベスト プラクティスを適用します。
IP アドレスの許可リストを使用する
未承認のソースからのアクセスを防止し、特定の IP アドレスへのアクセスを制限するには、Redshift クラスタでアクセス制御を有効にします。
Redshift アクセス制御を使用している場合、Cloud Data Fusion でクラスタにアクセスするには、次の手順に従います。
- Redshift クラスタに接続する必要がある Google Cloud のサービスまたはマシンの外部 IP アドレス(プロキシ サーバー IP など)を取得します(IP アドレスの表示をご覧ください)。Dataproc クラスタの場合は、すべてのマスターノードと子ノードの IP アドレスを取得します。
Google Cloud マシンの IP アドレスの受信ルールを作成して、セキュリティ グループの許可リストに IP アドレスを追加します。
Wrangler に接続プロパティを追加してテストします。
- ウェブ インターフェースで Cloud Data Fusion インスタンスを開きます。
- [Wrangler] > [接続を追加] をクリックして、Redshift の新しい接続を作成します。
- すべての接続プロパティを入力します。
- [テスト接続] をクリックして、問題を解決します。
複数のスプリットを作成するには、境界クエリを使用します。
複数のスプリットの場合は、境界クエリを使用してマルチノード クラスタを管理します。Redshift からデータを抽出し、負荷を各ノードに均一に負荷を分散するシナリオでは、Redshift ソースコネクタのプロパティに境界クエリを構成します。
- [Studio] ページの Cloud Data Fusion パイプラインで、Redshift ノードに移動して [プロパティ] をクリックします。
[詳細] プロパティで、次のことを指定します。
- 作成するスプリット数を入力します。
- 各スプリットのフェッチサイズを入力します。
- マルチノードの Redshift クラスタに適用する境界クエリを入力します。
- [分割列] フィールド名を入力します。
たとえば、次のようなユースケースがあるとします。
- 1,000 万のレコードを含むテーブルがあります。
id
という一意の ID 列があります。- Redshift クラスタには 4 つのノードがあります。
目的: クラスタの可能性を活用するために、複数のスプリットを生成します。これを実施するには、次のプロパティ構成を使用します。
[境界クエリ] フィールドに、次のクエリを入力します。
SELECT MIN(id), MAX(id) FROM tableName
このクエリで、
id
はスプリットが適用される列の名前です。[分割列] フィールドに列名の
id
を入力します。スプリット数とフェッチサイズを入力します。これらのプロパティは相互に関連しているため、フェッチサイズに基づいてスプリットを計算することも、その逆も可能です。この例では、次のものを入力します。
[スプリット数] フィールドに
40
と入力します。この例では、テーブルに 1,000 万のレコードがあり、40 のスプリットを作成すると、各スプリットには 25 万のレコードが含まれます。[フェッチサイズ] フィールドに
250,000
と入力します。
次のステップ
- Cloud Data Fusion のプラグインを確認する。