Closed5

CDM 形式のダミー データを Azure Data Lake Storagen に格納して Azure Synapse Analytics マッピング データ フローで読み込む

nakazaxnakazax

はじめに

タイトルの通り、CDM (Common Data Model) 形式のダミー データの作成から Synapse マッピング データ フローでの読み込みまでの一連の流れのメモ書き。

nakazaxnakazax

1. ダミー データ作成

ダミー データ作成サイトとして人気の Mockaroo で適当なダミー データの CSV ファイルを作成してダウンロードしておく。
https://www.mockaroo.com/

データ定義はこんな感じにした。

作成されたダミー データの先頭 5 件はこんな感じ。

id,first_name,last_name,email,age,country_code
422c5102-abfd-4754-9006-1f0ba00f938a,Wilburt,Winter,wwinter0@dmoz.org,48,CZ
c5d6125a-9e8e-4d25-8816-22d842e71c8e,Abdul,McSkin,amcskin1@blog.com,43,PL
3b8d7635-8d34-4ce2-8a0f-6609dc2fd5f6,Omar,Eyden,oeyden2@telegraph.co.uk,82,SE
9fe5576b-554e-49f1-bb92-b1f4fbd67ce5,Angelico,Honatsch,ahonatsch3@biblegateway.com,99,CN
nakazaxnakazax

2. model.json 作成

CDM の model.json の仕様について以下 Docs を参照しつつ作成。
https://learn.microsoft.com/ja-jp/common-data-model/model-json

作成した model.json の例はこちら。location などは書き換えること。

{
    "name": "cdm",
    "version": "1.0",
    "entities": [
        {
            "$type": "LocalEntity",
            "name": "users_a",
            "attributes": [
                {
                    "name": "id",
                    "dataType": "guid",
                    "maxLength": -1
                },
                {
                    "name": "first_name",
                    "dataType": "string",
                    "maxLength": 128
                },
                {
                    "name": "last_name",
                    "dataType": "string",
                    "maxLength": 128
                },
                {
                    "name": "email",
                    "dataType": "string",
                    "maxLength": 128
                },
                {
                    "name": "age",
                    "dataType": "int64",
                    "maxLength": -1
                },
                {
                    "name": "country_code",
                    "dataType": "string",
                    "maxLength": 128
                }
            ],
            "partitions": [
                {
                    "name": "users_a_1",
                    "location": "https://sthinadsdemodfs.dfs.core.windows.net:443/demo-data/CdmSample/cdm/users_a/users_a_1.csv",
                    "fileFormatSettings": {
                        "$type": "CsvFormatSettings",
                        "columnHeaders": true,
                        "delimiter": ",",
                        "quoteStyle": "QuoteStyle.Csv",
                        "csvStyle": "CsvStyle.QuoteAlways",
                        "encoding": "UTF-8"
                    }
                },
                {
                    "name": "users_a_2",
                    "location": "https://sthinadsdemodfs.dfs.core.windows.net:443/demo-data/CdmSample/cdm/users_a/users_a_2.csv",
                    "fileFormatSettings": {
                        "$type": "CsvFormatSettings",
                        "columnHeaders": true,
                        "delimiter": ",",
                        "quoteStyle": "QuoteStyle.Csv",
                        "csvStyle": "CsvStyle.QuoteAlways",
                        "encoding": "UTF-8"
                    }
                },
                {
                    "name": "users_a_3",
                    "location": "https://sthinadsdemodfs.dfs.core.windows.net:443/demo-data/CdmSample/cdm/users_a/users_a_3.csv",
                    "fileFormatSettings": {
                        "$type": "CsvFormatSettings",
                        "columnHeaders": true,
                        "delimiter": ",",
                        "quoteStyle": "QuoteStyle.Csv",
                        "csvStyle": "CsvStyle.QuoteAlways",
                        "encoding": "UTF-8"
                    }
                }
            ]
        },
        {
            "$type": "LocalEntity",
            "name": "users_b",
            "attributes": [
                {
                    "name": "id",
                    "dataType": "guid",
                    "maxLength": -1
                },
                {
                    "name": "first_name",
                    "dataType": "string",
                    "maxLength": 128
                },
                {
                    "name": "last_name",
                    "dataType": "string",
                    "maxLength": 128
                },
                {
                    "name": "email",
                    "dataType": "string",
                    "maxLength": 128
                },
                {
                    "name": "age",
                    "dataType": "int64",
                    "maxLength": -1
                },
                {
                    "name": "country_code",
                    "dataType": "string",
                    "maxLength": 128
                }
            ],
            "partitions": [
                {
                    "name": "users_b_1",
                    "location": "https://sthinadsdemodfs.dfs.core.windows.net:443/demo-data/CdmSample/cdm/users_b/users_b_1.csv",
                    "fileFormatSettings": {
                        "$type": "CsvFormatSettings",
                        "columnHeaders": true,
                        "delimiter": ",",
                        "quoteStyle": "QuoteStyle.Csv",
                        "csvStyle": "CsvStyle.QuoteAlways",
                        "encoding": "UTF-8"
                    }
               },
                {
                    "name": "users_b_2",
                    "location": "https://sthinadsdemodfs.dfs.core.windows.net:443/demo-data/CdmSample/cdm/users_b/users_b_2.csv",
                    "fileFormatSettings": {
                        "$type": "CsvFormatSettings",
                        "columnHeaders": true,
                        "delimiter": ",",
                        "quoteStyle": "QuoteStyle.Csv",
                        "csvStyle": "CsvStyle.QuoteAlways",
                        "encoding": "UTF-8"
                    }
                }
            ]
        }
    ]
}
nakazaxnakazax

3. Azure Data Lake Storage Gen2 にアップロード

model.json の location に一致する形でダミー データをアップロード


nakazaxnakazax

4. Synapse マッピング データ フローで読み込み

(Data Factory でも同様の操作が可能)

  • データ フローを新規作成してデバッグをオンにする
  • ソース変換を配置、各タブで以下のように設定していく

ソースの設定

  • ソースの種類: インライン
  • インライン データセットの種類: Common Data Moel
  • リンク サービス: ADLS Gen2 のリンク サービスを設定

ソースのオプション

  • メタデータの形式: Model.json
  • ルートの場所: ADLS 上の model.json があるフォルダを指定
  • エンティティ: ここでは users_a を指定

プロジェクション

  • スキーマのインポートを行い、列名と種類が正常に表示されれば OK

データのプレビュー

  • データが読み込まれれば OK

ここまで実施できれば、後は通常のデータ フローと同じ流れで処理できる。

このスクラップは2022/10/03にクローズされました