---
title: データマッピング：バイナリオブジェクトの処理
date: 2020-10-21
categories:
  - data-integration
  - database-mapping
  - sql
  - tools
tags:
  - binary-objects
  - data-mapping
description: Altova MapForceは、数々の賞を受賞しているデータマッピングツールであり、あらゆる主要なリレーショナルデータベースとの間で、バイナリオブジェクトを容易にマッピングする機能を提供します。
---
Status: #blog

Tags:  #binary-objects #data-mapping

Categories: [data-integration](/blog/ja/category/data-integration.md) | [database + sql](/blog/ja/category/database-sql.md) 
# データマッピング：バイナリオブジェクトの処理

データベースにおけるバイナリオブジェクトの管理は困難です。それらはサイズが大きく、内容が人間にとって読み取りにくく、また、制御文字と誤解される可能性のあるデータが含まれていることがあります。バイナリオブジェクトのデータ型名である「BLOB」自体が、多くのデータベース管理者がそれらを好まないことを反映しています。リレーショナルデータベースが登場する以前、BLOBは「定義が曖昧または不定形なもの」と定義されていました

Altova MapForceは、数々の賞を受賞している、 [あらゆるデータ形式間の変換と統合を可能にする、グラフィカルなデータマッピングツール](https://www.altova.com/ja/mapforce), この機能は、あらゆる主要なリレーショナルデータベースとの間で、バイナリオブジェクトのデータマッピングを簡単に行うための機能を提供します。画像、PDFファイル、ビデオファイル、またはその他のバイナリデータなど、様々なデータをマッピングできます。具体的な例を見てみましょう。

![](/blog/images/blob-insertion.png)

<!--more-->

MapForceには、バイナリオブジェクトとデータベース間のマッピングを行うための、組み込み関数として「read-binary-file」と「write-binary-file」が含まれています。この記事では、MapForceのオンラインヘルプに掲載されている「read-binary-file」の例を拡張し、様々なバイナリオブジェクトをリレーショナルデータベースに挿入するための完全なマッピングを作成します。

以下に、データベースに画像を取り込む方法を示すサンプルコードを示します

[![オンラインヘルプの例：バイナリファイルのマップ機能について](/blog/images/help-ex-1.png)](help-ex-1.png)

このマッピング処理では、ローカルファイルである「image01.png」をデータベースのテーブルに挿入します。データベースの構造を見ると、画像に関するメタデータが別の列に格納されており、これらの情報を利用して同じ画像を検索できることがわかります。大量のバイナリデータファイルを、後で検索する方法がない状態でデータベースに格納するのは避けるべきです。

今回の利用事例では、マーケティング部門が複数の製品をサポートする様々なバイナリファイルを管理するために、SQLiteデータベースを作成します。このバイナリデータには、ロゴ画像ファイル、製品データシートのPDF、製品の使用状況を示すスクリーンショット、写真、ビデオファイルなどが含まれる可能性があります。

まず、挿入したい情報を記述するための、シンプルなCSV形式のテキストファイルから始めます

[![データベースへのデータ取り込みに使用するCSV形式のデータモデル](/blog/images/csv-model.png)](csv-model.png)

このプロジェクトが完了する頃には、データベース内に数十個、あるいは数百個ものデータが蓄積されている可能性があります。後で特定のデータを抽出する際に、データ種類の名前は、検索を行う上で非常に重要なメタデータとなります。しかし、もしデータ種類の列にある個々の項目に誤字や不整合があった場合、膨大なバイナリデータが孤立し、復元不可能になってしまう可能性があります。

資産の種類を特定の一覧から選択できるように、CSVファイルをXMLSpyに取り込み、XMLスキーマを生成することができます。その際、スキーマ内の「Type」要素は、あらかじめ定義された一覧から選択されるように設定します。こうすることで、経験の浅いマーケティングインターンでも、資産の一覧を簡単に作成できるようになります [XMLSpy のグリッド表示機能](https://www.altova.com/ja/xmlspy-xml-editor). 「タイプ」フィールドは、指定された形式で入力する必要があります

[![XMLSpyのグリッドビューにおけるデータベースアップロード機能。](/blog/images/grid-view-1.png)](grid-view-1.png)

XMLスキーマに製品名のリストを追加することも可能ですし、少なくとも「Product」要素が存在することを必須にすることもできます。さらに、アセットの型を`xs:anyURI`に設定することで、ファイルへの参照を強制することも可能です。以下に、XMLSpyのスキーマビューで表示される「詳細」ヘルプウィンドウの例を示します。この例では、アセット要素のデータ型設定が示されています

[![アップロードモデルにおける「Asset」要素のXMLスキーマ定義](/blog/images/asset-details.png)](asset-details.png)

MapForceにおいて、CSV形式またはXML形式のデータソースからデータをマッピングする場合、バイナリオブジェクトのマッピング方法は基本的に同じです。

まず、新しいMapForceを開き、資産リストとデータベースのテーブルをデータマッピングの対象として設定します。

[![ソースオブジェクトのリストとデータベーステーブル間で、バイナリデータを対応付ける処理](/blog/images/map1.png)](map1.png)

データベースの分析には、DatabaseSpyを使用しました [新しいSQLiteデータベースのテーブルを作成します](https://www.altova.com/ja/databasespy) MapForceヘルプに記載されている例を少し修正しました。製品名を入力する列を「製品」とし、資産の種類を「説明」列に入力します。「記録日」列には、各バイナリオブジェクトの作成日を記録します。

それでは、MapForceのヘルプに記載されているように、ID列を自動採番に設定し、ソースとターゲット間の簡単な関連付けを行います

[![ソースオブジェクトのリストとデータベーステーブル間の、シンプルな対応関係を定義します](/blog/images/map2.png)](map2.png)

ソースマップから取得した「製品」と「タイプ」の情報は、データベースの特定の列に直接マッピングされます。また、「行」要素のマッピングは、入力データの各行に対して、新しいデータベースレコードを作成するように指示します。

それでは、データベース内のBLOB（バイナリラージオブジェクト）に、バイナリデータを格納する方法について説明します

[![データベース内のバイナリオブジェクトを、BLOB（バイナリラージオブジェクト）としてマッピングする](/blog/images/map3.png)](map3.png)

組み込みのMapForce関数「read-binary-file」は、ソースの「Asset」要素に指定されたファイル名を使用して、バイナリデータを読み込み、BLOB（Binary Large Object）を作成します。この関数は、ソースファイル名に関わらず、常にソースデータをbase64エンコードされたバイナリデータとして扱います。

マッピングを完了するためには、アセットからファイル名を抽出して、保存日を記録するための連携が必要です

[![バイナリオブジェクトのデータマッピングの完全な例](/blog/images/map4.png)](map4.png)

「フォルダを削除」機能は、ローカルファイル、ネットワークファイル、またはウェブ上のファイルに関わらず、パスから自動的にファイル名を抽出します。

`now`関数は、マッピングの実行日時を記録しますが、今回は日付のみが必要なので、`substring-before`関数を使って時刻部分を削除しました。

マッピング画面の下部にある「実行」ボタンをクリックすると、マッピング処理が実行され、SQLスクリプトが生成されます

[![データマッピング用のバイナリオブジェクトを処理するためのSQLスクリプトが生成されました](/blog/images/sql-script.png)](sql-script.png)

このスクリプトは、現時点での結果を確認するためのプレビュー版です。メインの出力メニューから選択することで、スクリプトを実行できます

[![データマッピング用のSQLスクリプトを実行するためのメニューオプションを追加します（バイナリオブジェクト用）](/blog/images/output-menu.png)](output-menu.png)

スクリプトの実行結果が表示されます

[![SQLスクリプトの実行結果。バイナリオブジェクトのデータマッピングが正常に完了しました](/blog/images/script-result.png)](script-result.png)

データベースに接続し、その結果をMapForce上でさらに検証するために、「DBクエリ」ボタンをクリックします

[![MapForceのデータベースクエリウィンドウを使用して、データマッピングのバイナリオブジェクトを検証します](/blog/images/db-query.png)](db-query.png)

製品ファイル列に表示されるBLOBデータからは、あまり多くの情報を得られませんが、他の列には、各資産に関する有用なメタデータが記載されています。

ある [追記](https://www.altova.com/blog/data-mapping-binary-objects-part-2/) データマッピングのデモンストレーションを行い、バイナリオブジェクトをどのように対応させるかを示します [データベースから資産情報を抽出する](https://www.altova.com/blog/data-mapping-binary-objects-part-2/) そして、それらを元の形式で保存します。もしどうしても待ちきれない場合は、 [無料トライアル版をダウンロードする](https://www.altova.com/ja/download) 独自のデータマッピング、変換、およびデータ加工プロジェクトを開始するために、チュートリアル、ヘルプ、そしてさらに多くのサンプルをご用意しています！
