DBMSでのデータの直接マージ
このシナリオでは、MySQLデータベースへの接続を開き、顧客IDに基づいてソーステーブルのデータをターゲットテーブルにマージし、マージ操作の前後でターゲットテーブルのコンテンツを表示する単純なジョブについて説明しています。WHERE句は、マージ操作中にデータをフィルタリングするために使用します。
-
tMysqlConnectionコンポーネント、tSQLTemplateMergeコンポーネント、2つのtMysqlInputコンポーネント、および2つのtLogRowコンポーネントを[Palette] (パレット)からデザインワークスペースにドロップします。
-
[Trigger] (トリガー) > [OnSubjobOK]接続を使用して、tMysqlConnectionコンポーネントを最初のtMysqlInputコンポーネントに接続します。
-
[Row] (行) > [Main] (メイン)接続を使用して、最初のtMysqlInputコンポーネントを最初のtLogRowコンポーネントに接続します。この行には、ターゲットテーブルの最初のコンテンツがコンソールに表示されます。
-
[Trigger] (トリガー) > [OnSubjobOK] (サブジョブがOKの場合)接続を使用して、最初のtMysqlInputコンポーネントをtSQLTemplateMergeコンポーネントに、tSQLTemplateMergeコンポーネントを2番目のtMysqlInputコンポーネントに接続します。
-
[Row] (行) > [Main] (メイン)接続を使用して、2番目のtMysqlInputコンポーネントを2番目のtLogRowコンポーネントに接続します。この行には、マージ結果がコンソールに表示されます。
-
tMysqlConnectionコンポーネントをダブルクリックして、[Basic settings] (基本設定)ビューを表示します。
-
データベース接続の詳細を手動で設定するか、[Property Type] (プロパティタイプ)リストから[Repository] (リポジトリー)を選択し、既に[Repository] (リポジトリー)ツリービューの[Metadata] (メタデータ)エリアで定義され、保管されている場合は、DB接続を選択します。
メタデータの詳細は、Talend Studioでメタデータを管理をご覧ください。
-
最初のtMysqlInputコンポーネントをダブルクリックして、[Basic settings] (基本設定)ビューを表示します。
-
[Use an existing] (既存の接続を使用)チェックボックスをオンにします。ジョブで複数のDB接続コンポーネントを使用している場合は、[Component List] (コンポーネントリスト)から使用するコンポーネントを選択します。
-
[Edit schema] (スキーマを編集)の横にある[...]ボタンをクリックしてターゲットテーブルのデータストラクチャーを定義するか、[Schema] (スキーマ)リストから[Repository] (リポジトリー)を選択します。また、スキーマが既に定義されていて[Repository] (リポジトリー)ツリービューの[Metadata] (メタデータ)エリアに保存されている場合は、ターゲットテーブルを選択します。
このシナリオでは、組み込みスキーマを使用します。
-
上記のようにカラムを定義し、[OK]をクリックしてスキーマストラクチャーを出力コンポーネントにプロパゲートさせ、スキーマダイアログボックスを閉じます。
-
このシナリオでは、[Table Name] (テーブル名)フィールドにターゲットテーブルの名前をcustomer_info_mergeします。
-
[Guess Query] (クエリーを推測)ボタンをクリックするか、[Query] (クエリー)エリアに"SELECT * FROM customer_info_merge"と入力して、すべてのテーブルカラムを取得します。
-
最初のtMysqlInputコンポーネントとまったく同じ設定を使用して、2番目のtMysqlInputコンポーネントのプロパティを定義します。
-
各tLogRowコンポーネントの[Basic settings] (基本設定)ビューで、[Mode] (モード)エリアの[Table] (テーブル)オプションを選択して、コンテンツがコンソールのテーブルセルに表示されるようにします。
-
tSQLTemplateMergeコンポーネントをダブルクリックして、[Basic settings] (基本設定)ビューを表示します。
-
関連するフィールドに、ソーステーブルとターゲットテーブルの名前を入力します。
このシナリオでは、ソーステーブルはnew_customer_infoで、8件のレコードが含まれています。ターゲットテーブルはcustomer_info_mergeで、これには5件のレコードが含まれ、テーブルは両方とも同じデータストラクチャーです。
ソーステーブルとターゲットテーブルのスキーマストラクチャーが異なる場合があります。ただし、この場合は [Merge ON]テーブル、[UPDATE Columns] (アップデートカラム)テーブル、および[INSERT Columns] (挿入カラム)テーブルの各行で指定されたソースカラムとターゲットカラムのデータ型が同じになっており、ターゲットカラムの長さも対応するソースカラムからのデータ挿入を可能にしています。
-
ソーススキーマを手動で定義するか、[Schema] (スキーマ)リストから[Repository] (リポジトリー)を選択し、スキーマが既に定義され、[Repository] (リポジトリー)ツリービューの[Metadata] (メタデータ)エリアに保管されている場合は、該当するテーブルを選択します。
このシナリオでは、組み込みスキーマを使用します。
-
上記のようにカラムを定義し、[OK]をクリックしてスキーマダイアログボックスを閉じ、ターゲットスキーマに対しても同じようにします。
-
[Merge ON] (マージON)テーブルの下の緑色の[+]ボタンをクリックして行を追加し、[ID]カラムをプライマリキーとして選択します。
-
マージ操作中に既存のデータをアップデートする場合は、[Use UPDATE] (アップデートを使用)チェックボックスをオンにします。緑色の[+]ボタンをクリックし、目的のカラムを選択してアップデートするカラムを定義します。
このシナリオでは、顧客IDに基づいてすべてのカラムをアップデートします。そのため、[ID]カラム以外のすべてのカラムを選択します。
プライマリキーとして定義するカラムをアップデートの対象にすることはできません。
-
[Specify UPDATE WHERE clause] (UPDATE WHERE句の指定)チェックボックスをオンにし、4以上のIDを持つ既存のレコードのみがアップデートされるように、[WHERE clause] (WHERE句)フィールドにcustomer_info_merge.ID >= 4を二重引用符で囲んで入力します。
-
[Use INSERT] (アップデートの使用)チェックボックスをオンにし、[INSERT Columns] (挿入カラム)テーブルでデータを取得してデータを挿入するカラムを定義します。
この例では、ターゲットテーブルに存在しないすべてのレコードを挿入します。
-
表示する[SQL Template] (SQLテンプレート)ビューを選択し、使用するSQLテンプレートを追加します。
デフォルトでは、[SQLTemplateMerge]コンポーネントにより[MergeUpdate]および[MergeInsert]という2つのシステムSQLテンプレートが使用されます。
[SQL Template] (SQLテンプレート)タブでは、システムSQLテンプレートを追加するか、独自に作成し、ジョブで使用してコード化された操作を実行できます。詳細は、tSQLTemplateFilterColumnsの標準プロパティをご覧ください。
-
[Add] (追加)ボタンをクリックして行を追加し、テンプレートリストから[Commit] (コミット)を選択して、マージ結果をデータベースにコミットします。
または、[Trigger] (トリガー) > [OnSubjobOK]接続を使用してtSQLTemplateMergeコンポーネントをtSQLTemplateCommitまたはtMysqlCommitコンポーネントに接続し、マージ結果をデータベースにコミットすることもできます。
-
ジョブを保存し、[F6]を押して実行します。
ターゲットテーブルの元のコンテンツとマージ結果の両方がコンソールに表示されます。ターゲットテーブルのレコードNo. 4とNo. 5にはアップデートされた情報が、レコードNo.6からNo. 8には挿入された情報が含まれています。