MetaDapper:適切なツールでデータのマッピングと変換が簡単に

公開: 2022-03-11

データの変換、翻訳、マッピングは決してロケット科学ではありませんが、決して退屈です。 単純なデータ変換タスク(たとえば、CSVファイルをクラスインスタンスのリストに読み込む)でさえ、重要な量のコードを必要とする場合があります。 これらのタスクはすべて多くの共通点がありますが、独自のデータ変換方法を必要とするほど「十分に異なる」ものです。

私たちが構築するほぼすべてのシステムでは、既存のデータストアからデータをインポートする場合でも、着信ストリームからデータを処理する場合でも、内部用に1つの形式から別の形式に変換する場合でも、ある時点でデータをある形式から別の形式に変換する必要があります。データを処理するか、目的の出力形式に変換します。

そして、そうするたびに、タスクはこれまで何度も行ったことと非常にイライラするように見えますが、データマッピングプロセスを最初からやり直す必要があるほどの違いがあります。

さらに、それらにアクセスするための最も人気のあるフォーマットとテクノロジーが進化し続け、新しいものが導入されて人気が高まるにつれて、プログラマーは常に新しいデータ変換とマッピングの手法、ライブラリ、API、およびフレームワークを学ぶ必要があります。 データサイエンスサービスの開発と進化が続くにつれて、専用ツールの需要も拡大しています。

AutoMapper(あるオブジェクトから別のオブジェクトにデータをマッピングする)やResharper(既存のコードをリファクタリングする)などのツールを活用できますが、何をするにしても、コードの記述は面倒であり、常に維持する必要があります。 次に、内部コードとキー値を別のレイヤーまたはシステムの値に変換する、null値をデフォルト値に変換する、型変換など、クロスドメイン変換処理のソリューションを考え出す必要があります。

検証には、DataAnnotationsやjQuery Validationプラグインなどのテクノロジーや、一連のカスタム検証コードによって対処される同様の問題があります。 そして、これらのテクノロジーのそれぞれのニュアンスは非常に微妙な場合があります。

高度なデータサイエンティストとして、あなたは「もっと良い方法が必要だ」と自分に言い聞かせます。 まあ、実際にはあります。 そして、それがこのデータマッピングチュートリアルの目的です。

MetaDapperデータマッピングツールの紹介

MetaDapperは、さまざまなデータマッピング手法を使用してこのプロセスを改善するのに役立つデータマッピングツールです。

MetaDapperは、データ変換プロセスを可能な限り簡素化および合理化することを目的とした.NETライブラリです。

MetaDapperは、次の方法でデータ変換を容易にします。

  • データ変換プロセスの繰り返し可能な定型部分を、各データ変換タスクに固有の側面から切り離します。
  • 任意の複雑さのマッピングおよび変換ルールを指定するための、使いやすく直感的なユーザーインターフェイスを提供します。

MetaDapperは、論理マッピング(スキーマ、データ変換、および検証)を物理データマッピング(さまざまなファイル形式およびAPIとの間の変換)から分離します。 論理マッピングは強力な関数セットを備えており、独自のメソッドをフックして非常に特定のニーズを処理できます。 物理マッピングには、絶えず拡張されているサポートされているフォーマットの豊富なセットが含まれています。 マッピングを構成するために、MetaDapperConfiguratorが提供されています。 マッピングを作成および編集し、テストまたは1回限りの変換のためにそれらを実行するための使いやすいWindows実行可能ファイル。

クラスインスタンスのリストのXMLまたはCSVファイルへの変換、SQLデータベースレコードの入力、テーブルの入力用のSQLスクリプトの生成、スプレッドシートの作成などはすべて、多くの場合数秒で作成できる同じ構成ファイルを使用して行われます。

MetaDapperを.NETプログラムに含めるには、次のことを行うだけです。

  • ライブラリへの参照を追加します
  • MetaDapperエンジンをインスタンス化します
  • ソースリーダー(および任意のパラメーター)、宛先ライター(および任意のパラメーター)、および構成ファイルを指定して、マッピングを実行します。

成功すると、ライターは変換されたデータを出力します。 エラーが発生すると、例外によって詳細なエラー情報が返されるため、データを拒否したり、構成を調整したりできます。

データマッピングの簡単な例を次に示します。

 List<MyClass> result; try { // Instantiate the MetaDapper library. var log = new Log(); var cultureInfo = new CultureInfo("en-US"); var md = new MetaDapper.Engine.MetaDapper(log, cultureInfo); using (var inputStream = new StreamReader(@"C:\myfile.csv")) { md.MapData( new CsvReaderParameters { Log = log, CultureInfo = cultureInfo, InputStream = inputStream.BaseStream, InputEncoding = Encoding.ASCII, FirstRecordIsHeader = false }, new PublicPropertiesWriterParameters { Log = log, CultureInfo = cultureInfo }, @"C:\MyMetaDapperConfiguration.xml", false, out result); } } catch (Exception) { throw; }

MetaDapper「Configurator」

MetaDapper Configuratorは、データ構造と変換/マッピングルールを定義する手順を視覚的にウォークスルーする方法を提供します。 Configuratorを使用すると、構成を作成、編集、および実行できます(つまり、テストまたは1回限りの変換用)。

MetaDapperのConfiguratorは、可能な限り多くのプロセスを自動化するよう努めています。 たとえば、フィールドマッピングを指定する場合、名前の照合を使用して、可能な場合はソースフィールドと宛先フィールドが自動的に照合されます。 また、メタデータを含むデータソースのレコード定義を作成する場合、データソースをポイントすることでフィールド定義に自動的にデータを入力できます。

レコード定義は、作成されると、作成元のデータソース(存在する場合)へのリンクを維持するため、データソーススキーマが後で変更された場合に自動的に更新されます。 メタデータがほとんどまたはまったくないデータソースのレコード定義を構成するときに、メタデータを含む別の同様のデータソースが利用できる場合、そのレコード定義を(メタデータとともに)コピーして、新しいレコード定義の基礎として使用できます。次に、2つのデータソース間に存在する可能性のある違いを反映するように編集できます。 また、スキーマとメタデータが複数のデータソースで同一である場合は、単一のレコード定義をそれらすべてに使用できます。

データ変換プロセスの簡素化

データ変換プロセスに固有のいくつかの課題と、MetaDapperが開発者のためにそれらを促進および簡素化する方法をさらに詳しく見ていきましょう。

ソースから宛先データへのマッピング

メンテナンスの過程で内部または外部の構造が変更された場合、これらの構造に依存するマッピングコードも調整する必要がある場合があります。 これはメンテナンス作業が頻繁に必要となる領域であるため、どのソリューションを使用する場合でも、メンテナンスコストを評価する必要があります。 たとえば、TotalSaleプロパティがSaleクラスから削除された場合、関連するマッピング割り当てはそれに応じて調整する必要があります。

MetaDapperを使用すると、マッピングの更新に数秒かかる場合があります。 たとえば、クラスタイプの場合、[クラスからフィールド定義をインポート]ボタンをクリックするだけで、フィールドを新しくコンパイルされた定義に更新できます。

ソースから宛先データへのマッピング

型変換

たとえば、日付/時刻や数値型変換などの一部の型変換は、ホスト環境の国際設定に影響されます(コードで明示的に指定されていない場合)。 したがって、異なる国際設定を使用して新しいサーバーにアプリケーションをデプロイすると、これを考慮していないコードが破損する可能性があります。 たとえば、日付値「1-2-2014」は、米国の設定のマシンでは2014年1月2日として解釈されますが、英国の設定のマシンでは2014年2月1日として解釈されます。 MetaDapperは、すべての暗黙的な.NET変換をサポートし、変換の一部として値の複雑な再フォーマットも可能にします。 さらに、MetaDapperのリーダー、ライター、およびマッピングエンジンで、個別の(つまり独立した)国際設定を指定できます。

複雑なデフォルト値

デフォルト値を決定するために、他のシステムへのアクセスを必要とする、または複雑なコーディングを必要とする特定のビジネスルールが必要になる場合があります。 MetaDapperを使用すると、任意の数のカスタムデリゲートメソッドをエンジンに登録し、デフォルト値の提供、カスタムデータ変換の実行、およびカスタムフィールド検証の提供に使用できます。

条件付き検証ルール

フィールド値が条件付きで必要になることは珍しくありません(または、それらの有効な値が他のフィールドの値に依存することさえあります)。 たとえば、[パートナー名]フィールドと[パートナーソーシャルセキュリティコード]フィールドを空白のままにすることができますが、パートナー名を指定する場合は、パートナーソーシャルセキュリティコード(および場合によっては他のフィールド)を指定する必要があります。 このタイプの条件付き検証は複雑であり、カスタムコードで間違えやすいです。 対照的に、MetaDapperを使用すると、この種のデータマッピング関係を簡単に構成できます。 具体的には、レコード定義のフィールドのリストを条件付き必須フィールドグループにリストできます。

これらのサンプルデータフィールド間の関係は、MetaDapperなどのデータマッピングツールを使用して簡単に構成できます。

次に、マッピングで、グループを任意のフィールドに関連付けることができます。nullでない場合は、グループ内のすべてのフィールドを指定する必要があります。 例えば:

このデータマッピングの例は、MetaDapperとカスタムコードを使用した簡単な構成を示しています。

ドメイン間でマップされた値を変換する

ソースデータに一貫性のない値が含まれている可能性があります。 たとえば、敬礼フィールドには、「Mr。」、「Mr」、「MR。」、「Mister」、「M」のほか、すべての女性に相当するものが含まれる場合があります。 または、通貨フィールドに「$」などの値が含まれている場合がありますが、宛先フォーマットには「USD」が必要です。 製品コードは、あるシステムから別のシステムに変換する必要がある可能性のある値のもう1つの例です。 MetaDapperでは、マッピング中に値を変換するために使用できる再利用可能な「同義語リスト」を指定できます。

定義したら、シノニムグループを指定して、関連するフィールドマッピングで使用できます。

このデータマッピング手法は、社会保障の例で同義語を適切に処理します。

値のフォーマットと複雑な計算に基づくマッピング

新しい値をフォーマットするには、1つ以上のフィールドの値を使用する必要がある場合があります。 たとえば、ソース値を定数で装飾する必要がある場合(たとえば、 sale.PriceEach = "$" + priceEach; )、または値を生成するためにいくつかのフィールドを使用する必要がある場合(たとえば、 sale.Code = code1 + “_” + code2; )。

MetaDapperは、フィールドのサブストリング部分や定数値など、現在のレコードの任意のフィールドを使用して値を作成できるフォーマット/テンプレート機能を提供します。 フォーマット後、値は指定された宛先タイプに変換されます(ちなみに、これは文字列である必要はありません)。

同様に、複雑な計算は、フィールド値と定数の任意の組み合わせで数学演算子と関数のフルセットを使用して、マッピング中に実行できます。

検証ルール

カスタム検証デリゲートを登録して、マッピングで使用できます。 フィールド値が整数であることを検証するカスタムメソッドの例を次に示します(フィールドのデータ型を整数にすることはありません)。

 private static bool ValidateIsInteger( Log log, CultureInfo cultureInfo, object value, ref List<ErrorInfo> errors) { try { Convert.ToInt32(value); } catch (Exception) { return false; } return true; }

MetaDapperをインスタンス化するときに、メソッドが登録されます。 次に、任意のフィールドマッピング定義に簡単に適用できます。

MetaDapperの定義図

グループ化、並べ替え、およびフィルタリング

グループ化と並べ替えの操作は、多くの場合データベースクエリで処理できますが、すべてのデータソースがデータベースであるとは限りません。 したがって、MetaDapperは、メモリ内で実行できる複雑なグループ化および並べ替え操作の構成をサポートします。

ソースデータの一部のみが必要になる可能性がある場合、データベース以外のソースからのフィルタリングは、実装と保守が非常に複雑になる可能性があります。 MetaDapperは、レコードごとに任意の数のフィールド評価を行うブール演算子を使用した複雑なフィルターの構成をサポートし、必要に応じて操作を任意に深くネストします。 例えば:

複雑なフィルターは、ここに示すデータマッピングプロセスで重要な役割を果たします。

上記のフィルターは、次のC#コードと同等です。

 if (sale.TransactionID > “0” AND sale.Currency == “USD” AND (sale.Amount > “3” || sale.Amount == “1”)

ネストされたマッピング

一部のマッピングでは、データ変換プロセスを完了するために複数のパスが必要です。 いくつかの例には、プレフィックスまたは合計レコードを必要とするデータ、フィールド値またはドキュメント構造に応じて異なる方法でマッピングする必要があるデータ、または単純に複雑なマッピングのさまざまな段階(つまり、名前の変換、型変換など)を分離する必要があるデータが含まれます。 そのために、MetaDapperは任意のレベルの深さへのネストされたマッピングをサポートします。

フォーマットと構造

データマッピングおよび変換ツールとして、MetaDapperは、内部のリーダーおよびライターインターフェイスを使用して、事実上すべてのデータ形式の読み取りまたは書き込みを可能にするように構築されています。 これにより、非常に軽量で、フォーマット固有のニュアンスのみに焦点を当てたリーダー/ライタークラスを作成できます。

リーダーとライターも、可能な限りインテリジェントかつ柔軟に動作します。 たとえば、XMLリーダーとライターは、XPathを使用して、XMLファイル内のデータを取得または書き込む場所を指定します。 同じ構成を使用して、たとえば非XML形式(CSVファイルなど)からの読み取りと書き込みを行うこともできます。この場合、XPath値は単に無視されます。 同様に、XPath設定を含まない構成をXMLリーダーまたはライターで使用すると、エラーが生成されます。

うん。 右。 もちろん。 (いくつかの実際のデータマッピングの例)

あなたは懐疑的です。 そして、私はあなたを責めません。 ソフトウェアツールがすべてであると主張することはめったにありません。 そこで、MetaDapperが運用上のメリットを提供するためにすでに使用されている実際の例をいくつか示します。

医療保険管理ソフトウェアを提供している会社には、Webフォームに記入したくないが、スプレッドシートでデータを提供したいという顧客がいました。 MetaDapperを使用して、アップロードされたスプレッドシートがメモリに読み込まれ、データがクリーンアップされ、レコードが検証され、結果がデータベースに保存されます。 彼らは、公開する各スプレッドシートテンプレートの構成ファイルを簡単に作成できるMetaDapperを使用して、人間による検証なしで顧客からのExcelファイルを受け入れることができます。

大規模なガス会社には内部アプリケーションがあり、管理ユーザーがExcel形式でレポートをダウンロードできるようにしたいと考えていました。 レポートの形式は定期的に変更される可能性があります。 MetaDapperは、データベースからExcelシートを生成するのを容易にしました。 Excel形式を更新するには、コードを変更したり再コンパイルしたりせずに、MetaDapper構成ファイルを更新するだけで済みます。

資産管理ソフトウェアを提供する会社は、これらのシステムにインポートするために、顧客に依存する会計パッケージ形式で財務データを生成するためのソリューションを必要としていました。 一般的な会計データクエリはORMラッパーを使用して開発され、MetaDapperを使用してデータを並べ替え、フィルタリングし、各顧客の目的のスキーマと形式にマッピングしました。 顧客ごとに1つ以上のMetaDapper構成が作成され、これは新規顧客の主要な販売機能になっています。 製品は(MetaDapperを使用して)数分で構成でき、カスタムまたは標準の会計パッケージ形式をサポートするため、新しい販売ごとに必須および既存のシステムとの統合が含まれます。 同じ会社が、さまざまなソフトウェア統合プロジェクトでMetaDapperを使用して、データのマッピングと変換、およびシステム間の内部コードの変換を行っています。

大手自動車再販業者は、Excel形式の販売レポートをアプリケーションの1つに追加する必要がありました。 レポートは1時間以内にアプリケーションに追加されました–開始から終了まで。

開発者は、別のWebサイトで使用されているセットと同じ米国の州の表を必要としていました。 MetaDapperを使用して、サイトからデータをマイニングし、数分でテーブルにデータを入力するためのSQLスクリプトを生成しました。

これらは、データマッピングツールとしてのMetaDapperの実証済みの有用性と価値のほんの一例です。

要約

データ変換についてより一般的に考え始め、ビジネスルールと無制限の有用性を備えたデータセットについて考え始めるには、精神的なジャンプが必要です。 MetaDapperは、その視点を促進および促進するフレームワークです。

MetaDapperや別のテクノロジーを使用する場合でも、独自のデータマッピングソリューションを使用する場合でも、これはデータ変換プロジェクトの複雑さと隠れたコストの一部を紹介しています。 お役に立てば幸いです。

(MetaDapperの詳細については、info @ metadapper.comのMetaDapperチームにお問い合わせください。)