---
title: "MapForceは、SQLのMERGE機能が最適なツールとして活用できる場合に、その機能をサポートしています"
date: "2016-11-01"
categories: 
  - "data-integration"
  - "tools"
tags: 
  - "database-mapping"
  - "etl"
  - "mapforce"
  - "sql-bulk-merge"
description: Altova MapForceが、大規模データベースに対するSQLマージ処理をサポートすることで、ETL（抽出、変換、ロード）の効率をどのように向上させるかを探求します。これにより、大量データの挿入や更新をスムーズに行うことが可能になります。
---
Status: #blog

Tags:  #database-mapping #etl #mapforce #sql-bulk-merge

Categories: [data-integration](/blog/ja/category/data-integration.md) | [database + sql](/blog/ja/category/database-sql.md)
# MapForceは、SQLのMERGE機能が最適なツールとして活用できる場合に、その機能をサポートしています

大規模なデータベーステーブルには、数百万、あるいは数億件ものデータ行が含まれることがあります。このような大規模なデータセットの維持を担当するデータベース管理者やその他の担当者は、ETL（抽出、変換、ロード）処理、更新、その他のSQLクエリの実行時間について常に懸念を抱いています。これらの処理をより効率的にするために、一部のデータベースベンダーは、個々の行ごとに処理を行うのではなく、単一のバルク挿入ステートメントとして、既存のテーブルに行を挿入または更新するためのSQLのMERGEステートメントを実装しました。

Altova MapForceは、利用可能な場合、SQLマージを自動的にサポートします [対象データベース](https://www.altova.com/ja/mapforce/database-mapping.html). 例を見てみましょう。

![shutterstock_66084286](/blog/images/shutterstock_66084286.jpg)

<!--more-->

### 挿入 vs. 更新 - 条件付き処理の場合

以下の図は、XMLファイルの要素とデータベースのテーブルとの間のデータマッピングを示しています。

![Altova MapForce データベースマッピング機能](/blog/images/database-mapping.png)

通常、MapForceはソースファイル内の各「Person」要素に対して、SQLの挿入文を生成します。これは、新しい、空のデータベーステーブルにデータを投入する場合に適しています。しかし、バックアップコピーと本データを同期するなど、他の状況では、挿入文は適切ではありません。MapForceでは、各データベースのマッピングに対して、必要な適切なSQL操作を簡単に指定することができます。

対象のデータベーステーブル（上記の例では「Person」テーブル）の横にある「アクション」アイコンをクリックすると、「MapForce データベーステーブル アクション」ダイアログが開きます。 以下のスクリーンショットは、SQLの挿入文を「更新（条件付き）」に変更できるドロップダウン機能を示しています。

![Altova MapForceにおけるデータ更新時のアクション設定](/blog/images/set-update-if-action.png)

更新処理：条件を設定する必要があります。今回のマッピングでは、ソースデータに既存の主キーが含まれているレコードをデータベース内で更新し、かつ、ソースデータに主キーが存在しない場合は、新しいレコードをデータベースに挿入したいと考えています。

これは一般的に「条件付き更新（If…Then…Else）操作」として知られています。

「データベーステーブル操作」ダイアログでは、更新を行うための条件と、その条件が満たされない場合に実行される代替アクションを定義できます。ここで、定義された「条件が満たされた場合に更新し、それ以外の場合は挿入する」という一連のアクションが表示されています

![アップデート完了：MapForceにおけるSQLマージ機能がサポートされました](/blog/images/CompletedAction.png)

### 更新と一括マージの違い

これまでの説明では、マッピングの対象となるテーブルのデータベースを提供する企業については、まだ触れていません。その理由は、マッピングの設定が、MapForceでサポートされている主要なデータベースであれば、すべて同じ方法で定義されるからです。対象のデータベースがSQLマージをサポートしているかどうかに関わらず、特別な設定を行う必要はありません。

データベースのマッピング設計の下にある「MapForce出力」タブをクリックすると、MapForceは特定のデータベースの種類に合わせてカスタマイズされたSQLスクリプトを生成します。このスクリプトは、MapForceの出力ウィンドウに表示され、内容を確認することができます。ただし、このスクリプトは自動的に実行されることはありません。

もし対象のデータベースがSQL MERGEをサポートしている場合、スクリプトの冒頭付近にMERGEステートメントが表示されます。

![アップデート完了：MapForceにおけるSQLマージ機能がサポートされました](/blog/images/SQL-with-merge2.png)

もしターゲットデータベースがSQL MERGEをサポートしていない場合、ソースデータの各行に対して、個別のUPDATE...WHERE文が表示されます。

![SQLマージをサポートしていないデータベース用のMapForceスクリプト](/blog/images/SQL-with-update2.png)

MapForceでは、メニューの「出力」から「SQLスクリプトの実行」を選択することで、スクリプトを直接実行できます。または、マッピングを実行ファイルとして保存し、MapForce Serverで実行することで、実行時に入力ファイル名を指定して自動化することも可能です。

対象データベースでSQL Mergeがサポートされている場合、マッピングがMapForceで直接実行される場合でも、MapForce Serverを通じて自動化される場合でも、マージ処理を行うためのSQL文が生成されます。MapForce 2017は、SQL Server 2008以降、Oracle、IBM DB2、およびFirebirdで使用可能なSQL Merge文をサポートしています。

Altova社内でのテストの結果、MapForce ServerによるSQLマージのバッチ処理は、従来の技術と比較して最大15倍の効率が得られることが確認されました。*

*注：具体的な数値は、環境やデータ量によって変動する可能性があります

[データベースのマッピングに関する詳細情報はこちらをクリック](https://www.altova.com/ja/mapforce/database-mapping.html)してください。これには、データマッピングのソースまたはターゲットとしてサポートされているデータベースの完全なリストが含まれています。または、[こちらをクリックして](https://www.altova.com/ja/download-trial.html)、30日間の無料トライアル版をダウンロードしてください。このブログ記事で使用されているマッピングに使用するファイルは、MapForceのサンプルとして提供されており、マッピングを再現するための詳細な手順は、MapForceのヘルプに記載されています。

 

* パフォーマンスの結果は、Altova社内でのテストに基づいています。お客様の環境では、結果が異なる場合があります。
