Share via


Azure Data Factory または Azure Synapse Analytics を使用して Azure Data Lake Storage Gen1 との間でデータをコピーします

適用対象: Azure Data Factory Azure Synapse Analytics

ヒント

企業向けのオールインワン分析ソリューション、Microsoft Fabric の Data Factory をお試しください。 Microsoft Fabric は、データ移動からデータ サイエンス、リアルタイム分析、ビジネス インテリジェンス、レポートまで、あらゆるものをカバーしています。 無料で新しい試用版を開始する方法について説明します。

この記事では、Azure Data Lake Storage Gen1 をコピー先またはコピー元としてデータをコピーする方法について説明します。 詳細については、Azure Data Factory または Azure Synapse Analytics の概要記事を参照してください。

サポートされる機能

この Azure Data Lake Storage Gen1 コネクタは、次の機能でサポートされています。

サポートされる機能 IR
Copy アクティビティ (ソース/シンク) 1.1
マッピング データ フロー (ソース/シンク) 1
Lookup アクティビティ 1.1
GetMetadata アクティビティ 1.1
アクティビティを削除する 1.1

① Azure 統合ランタイム ② セルフホステッド統合ランタイム

具体的には、このコネクタを使用して次のことができます。

重要

セルフホステッド統合ランタイムを使ってデータをコピーする場合は、<ADLS account name>.azuredatalakestore.net および login.microsoftonline.com/<tenant>/oauth2/token に対するポート 443 のアウトバウンド トラフィックを許可するように、会社のファイアウォールを構成します。 後者は、Azure セキュリティ トークン サービスです。統合ランタイムがアクセス トークンを取得するためには、このサービスと通信を行う必要があります。

はじめに

ヒント

Azure Data Lake Store コネクタの使い方のチュートリアルについては、Azure Data Lake Store へのデータの読み込みに関する記事を参照してください。

パイプラインでコピー アクティビティを実行するには、次のいずれかのツールまたは SDK を使用します。

UI を使用して Azure Data Lake Storage Gen1 へのリンク サービスを作成する

次の手順を使用して、Azure portal UI で Azure Data Lake Storage Gen1 へのリンク サービスを作成します。

  1. Azure Data Factory または Synapse ワークスペースの [管理] タブに移動し、[リンク サービス] を選択して、[新規] を選択します。

  2. Azure Data Lake Storage Gen1 を検索し、Azure Data Lake Storage Gen1 コネクタを選択します。

    Screenshot of the Azure Data Lake Storage Gen1 connector.

  3. サービスの詳細を構成し、接続をテストして、新しいリンク サービスを作成します。

    Screenshot of linked service configuration for Azure Data Lake Storage Gen1.

コネクタの構成の詳細

以下のセクションでは、Azure Data Lake Store Gen1 に固有のエンティティを定義するために使用されるプロパティについて説明します。

リンクされたサービスのプロパティ

Azure Data Lake Store のリンクされたサービスでは、次のプロパティがサポートされます。

プロパティ Description 必須
type type プロパティは AzureDataLakeStore に設定する必要があります。 はい
dataLakeStoreUri Azure Data Lake Store アカウントに関する情報です。 この情報の形式は、https://[accountname].azuredatalakestore.net/webhdfs/v1 または adl://[accountname].azuredatalakestore.net/ です。 はい
subscriptionId Data Lake Store アカウントが属している Azure サブスクリプション ID です。 シンクでは必須
resourceGroupName Data Lake Store アカウントが属している Azure リソース グループ名です。 シンクでは必須
connectVia データ ストアに接続するために使用される統合ランタイム。 データ ストアがプライベート ネットワークにある場合、Azure 統合ランタイムまたはセルフホステッド統合ランタイムを使用できます。 このプロパティが指定されていない場合は、既定の Azure Integration Runtime が使用されます。 いいえ

サービス プリンシパル認証を使用する

サービス プリンシパル認証を使用するには、次の手順に従います。

  1. Microsoft Entra ID にアプリケーション エンティティを登録し、Data Lake Store へのアクセスを許可します。 詳細な手順については、「サービス間認証」を参照してください。 次の値を記録しておきます。リンクされたサービスを定義するときに使います。

    • アプリケーション ID
    • アプリケーション キー
    • テナント ID
  2. サービス プリンシパルに適切なアクセス許可を付与します。 Data Lake Storage Gen1 におけるアクセス許可の動作例については、「Azure Data Lake Store Gen1 のアクセス制御」を参照してください。

    • ソースとして: [データ エクスプローラー]>[アクセス] で、すべての上位フォルダー (ルートを含む) について、少なくとも実行アクセス許可を与えると共に、コピーするファイルの読み取りアクセス許可を与えます。 [このフォルダーとすべての子] を選択して再帰的に追加したり、 [アクセス許可エントリと既定のアクセス許可エントリ] として追加したりすることができます。 アカウント レベルのアクセスの制御 (IAM) に関する要件はありません。
    • シンクとして: [データ エクスプローラー]>[アクセス] で、すべての上位フォルダー (ルートを含む) に少なくとも実行アクセス許可を与えると共に、シンク フォルダーに書き込みアクセス許可を与えます。 [このフォルダーとすべての子] を選択して再帰的に追加したり、 [アクセス許可エントリと既定のアクセス許可エントリ] として追加したりすることができます。

次のプロパティがサポートされています。

プロパティ Description 必須
servicePrincipalId アプリケーションのクライアント ID を取得します。 はい
servicePrincipalKey アプリケーションのキーを取得します。 このフィールドを SecureString とマークして安全に保存するか、Azure Key Vault に保存されているシークレットを参照します。 はい
tenant アプリケーションが存在するテナントの情報 (ドメイン名やテナント ID など) を指定します。 Azure Portal の右上隅をマウスでポイントすることにより取得できます。 はい
azureCloudType サービス プリンシパル認証用に、Microsoft Entra アプリケーションが登録されている Azure クラウド環境の種類を指定します。
指定できる値は、AzurePublicAzureChinaAzureUsGovernment、および AzureGermany です。 既定では、サービスのクラウド環境が使用されます。
いいえ

例:

{
    "name": "AzureDataLakeStoreLinkedService",
    "properties": {
        "type": "AzureDataLakeStore",
        "typeProperties": {
            "dataLakeStoreUri": "https://<accountname>.azuredatalakestore.net/webhdfs/v1",
            "servicePrincipalId": "<service principal id>",
            "servicePrincipalKey": {
                "type": "SecureString",
                "value": "<service principal key>"
            },
            "tenant": "<tenant info, e.g. microsoft.onmicrosoft.com>",
            "subscriptionId": "<subscription of ADLS>",
            "resourceGroupName": "<resource group of ADLS>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

システム割り当てマネージド ID 認証を使用する

データ ファクトリまたは Synapse ワークスペースは、システム割り当てマネージド ID に関連付けることができます。これは、認証のサービスです。 独自のサービス プリンシパルを使用する場合と同様に、Data Lake Storage の認証にこのシステム割り当てマネージド ID を直接使用できます。 これにより、この指定されたリソースは、Data Lake Store にアクセスしてデータをコピーできます。

システム割り当てマネージド ID 認証を使用するには、次の手順に従います。

  1. ファクトリまたは Synapse ワークスペースと共に生成された サービス ID アプリケーション ID の値をコピーして、システム割り当てマネージド ID 情報を取得します。

  2. Data Lake Store へのアクセス権をシステム割り当てのマネージド ID に付与します。 Data Lake Storage Gen1 におけるアクセス許可の動作例については、「Azure Data Lake Store Gen1 のアクセス制御」を参照してください。

    • ソースとして: [データ エクスプローラー]>[アクセス] で、すべての上位フォルダー (ルートを含む) について、少なくとも実行アクセス許可を与えると共に、コピーするファイルの読み取りアクセス許可を与えます。 [このフォルダーとすべての子] を選択して再帰的に追加したり、 [アクセス許可エントリと既定のアクセス許可エントリ] として追加したりすることができます。 アカウント レベルのアクセスの制御 (IAM) に関する要件はありません。
    • シンクとして: [データ エクスプローラー]>[アクセス] で、すべての上位フォルダー (ルートを含む) に少なくとも実行アクセス許可を与えると共に、シンク フォルダーに書き込みアクセス許可を与えます。 [このフォルダーとすべての子] を選択して再帰的に追加したり、 [アクセス許可エントリと既定のアクセス許可エントリ] として追加したりすることができます。

リンクされたサービスの Data Lake Store の一般的な情報以外にプロパティを指定する必要はありません。

例:

{
    "name": "AzureDataLakeStoreLinkedService",
    "properties": {
        "type": "AzureDataLakeStore",
        "typeProperties": {
            "dataLakeStoreUri": "https://<accountname>.azuredatalakestore.net/webhdfs/v1",
            "subscriptionId": "<subscription of ADLS>",
            "resourceGroupName": "<resource group of ADLS>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

ユーザー割り当てマネージド ID 認証を使用する

データ ファクトリは、1 つ以上のユーザー割り当てマネージド ID に割り当てることができます。 このユーザー割り当てマネージド ID を BLOB ストレージ認証に使用できます。これにより、Data Lake にアクセスしてデータをコピーできます。 Azure リソース用マネージド ID の詳細については、Azure リソース用マネージド ID に関するページを参照してください

ユーザー割り当てマネージド ID 認証を使用するには、次の手順に従います。

  1. 1 つ以上のユーザー割り当てマネージド ID を作成して、Azure Data Lake に対するアクセスを許可します。 Data Lake Storage Gen1 におけるアクセス許可の動作例については、「Azure Data Lake Store Gen1 のアクセス制御」を参照してください。

    • ソースとして: [データ エクスプローラー]>[アクセス] で、すべての上位フォルダー (ルートを含む) について、少なくとも実行アクセス許可を与えると共に、コピーするファイルの読み取りアクセス許可を与えます。 [このフォルダーとすべての子] を選択して再帰的に追加したり、 [アクセス許可エントリと既定のアクセス許可エントリ] として追加したりすることができます。 アカウント レベルのアクセスの制御 (IAM) に関する要件はありません。
    • シンクとして: [データ エクスプローラー]>[アクセス] で、すべての上位フォルダー (ルートを含む) に少なくとも実行アクセス許可を与えると共に、シンク フォルダーに書き込みアクセス許可を与えます。 [このフォルダーとすべての子] を選択して再帰的に追加したり、 [アクセス許可エントリと既定のアクセス許可エントリ] として追加したりすることができます。
  2. 1 つ以上のユーザー割り当てマネージド ID をデータ ファクトリに割り当てて、ユーザー割り当てマネージド ID ごとに資格情報を作成します。

次のプロパティがサポートされています。

プロパティ Description 必須
資格情報 ユーザー割り当てマネージド ID を資格情報オブジェクトとして指定します。 はい

例:

{
    "name": "AzureDataLakeStoreLinkedService",
    "properties": {
        "type": "AzureDataLakeStore",
        "typeProperties": {
            "dataLakeStoreUri": "https://<accountname>.azuredatalakestore.net/webhdfs/v1",
            "subscriptionId": "<subscription of ADLS>",
            "resourceGroupName": "<resource group of ADLS>",
            "credential": {
                "referenceName": "credential1",
                "type": "CredentialReference"
            },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

データセットのプロパティ

データセットを定義するために使用できるセクションとプロパティの完全な一覧については、データセットに関する記事をご覧ください。

Azure Data Factory では次のファイル形式がサポートされます。 形式ベースの設定については、各記事を参照してください。

Azure Data Lake Store Gen1 では、形式ベースのデータセットの location 設定において、次のプロパティがサポートされています。

プロパティ Description 必須
type データセットの location の type プロパティは、AzureDataLakeStoreLocation に設定する必要があります。 はい
folderPath フォルダーのパス。 ワイルドカードを使用してフォルダーをフィルター処理する場合は、この設定をスキップし、アクティビティのソース設定で指定します。 いいえ
fileName 特定の folderPath の下のファイル名。 ワイルドカードを使用してファイルをフィルター処理する場合は、この設定をスキップし、アクティビティのソース設定で指定します。 いいえ

例:

{
    "name": "DelimitedTextDataset",
    "properties": {
        "type": "DelimitedText",
        "linkedServiceName": {
            "referenceName": "<ADLS Gen1 linked service name>",
            "type": "LinkedServiceReference"
        },
        "schema": [ < physical schema, optional, auto retrieved during authoring > ],
        "typeProperties": {
            "location": {
                "type": "AzureDataLakeStoreLocation",
                "folderPath": "root/folder/subfolder"
            },
            "columnDelimiter": ",",
            "quoteChar": "\"",
            "firstRowAsHeader": true,
            "compressionCodec": "gzip"
        }
    }
}

コピー アクティビティのプロパティ

アクティビティの定義に利用できるセクションとプロパティの完全な一覧については、パイプラインに関するページを参照してください。 このセクションでは、Azure Data Lake Store のソースとシンクでサポートされるプロパティの一覧を示します。

ソースとしての Azure Data Lake Store

Azure Data Factory では次のファイル形式がサポートされます。 形式ベースの設定については、各記事を参照してください。

Azure Data Lake Store Gen1 では、形式ベースのコピー ソースの storeSettings 設定において、次のプロパティがサポートされています。

プロパティ Description 必須
type storeSettings の type プロパティは AzureDataLakeStoreReadSettings に設定する必要があります。 はい
コピーするファイルを特定する:
オプション 1: 静的パス
データセットに指定されている所定のフォルダーまたはファイル パスからコピーします。 フォルダーからすべてのファイルをコピーする場合は、さらに * として wildcardFileName を指定します。
オプション 2: 名前範囲
- listAfter
アルファベット順で名前がこの値の後にある (この値は含まない) フォルダーまたはファイルを取得します。 ワイルドカード フィルターより優れたパフォーマンスを提供する、ADLS Gen1 用のサービス側フィルターを利用します。
このサービスでは、データセットに定義されているパスにこのフィルターが適用され、唯一のエンティティ レベルがサポートされています。 他の例については、「名前範囲フィルターの例」を参照してください。
いいえ
オプション 2: 名前範囲
- listBefore
アルファベット順で名前がこの値の前にある (この値は含める) フォルダーまたはファイルを取得します。 ワイルドカード フィルターより優れたパフォーマンスを提供する、ADLS Gen1 用のサービス側フィルターを利用します。
このサービスでは、データセットに定義されているパスにこのフィルターが適用され、唯一のエンティティ レベルがサポートされています。 他の例については、「名前範囲フィルターの例」を参照してください。
いいえ
オプション 3: ワイルドカード
- wildcardFolderPath
ソース フォルダーをフィルター処理するための、ワイルドカード文字を含むフォルダー パス。
使用できるワイルドカーは、* (ゼロ文字以上の文字に一致) と ? (ゼロ文字または 1 文字に一致) です。実際のフォルダー名にワイルドカードまたはこのエスケープ文字が含まれている場合は、^ を使用してエスケープします。
フォルダーとファイル フィルターの例」の他の例をご覧ください。
いいえ
オプション 3: ワイルドカード
- wildcardFileName
ソース ファイルをフィルター処理するための、特定の folderPath/wildcardFolderPath の下のワイルドカード文字を含むファイル名。
使用できるワイルドカーは、* (ゼロ文字以上の文字に一致) と ? (ゼロ文字または 1 文字に一致) です。実際のファイル名にワイルドカードまたはこのエスケープ文字が含まれている場合は、^ を使用してエスケープします。 「フォルダーとファイル フィルターの例」の他の例をご覧ください。
はい
オプション 4: ファイルの一覧
- fileListPath
指定されたファイル セットをコピーすることを示します。 コピーするファイルの一覧を含むテキスト ファイルをポイントします。データセットで構成されているパスへの相対パスであるファイルを 1 行につき 1 つずつ指定します。
このオプションを使用する場合は、データセットにファイル名を指定しないでください。 その他の例については、ファイル リストの例を参照してください。
いいえ
追加の設定:
recursive データをサブフォルダーから再帰的に読み取るか、指定したフォルダーからのみ読み取るかを指定します。 recursive が true に設定されていて、シンクがファイル ベースのストアである場合、空のフォルダーまたはサブフォルダーはシンクでコピーも作成もされません。
使用可能な値: true (既定値) および false
fileListPath を構成する場合、このプロパティは適用されません。
いいえ
deleteFilesAfterCompletion 宛先ストアに正常に移動した後、バイナリ ファイルをソース ストアから削除するかどうかを示します。 ファイルの削除はファイルごとに行われるためで、コピー アクティビティが失敗した場合、一部のファイルが既に宛先にコピーされソースからは削除されているが、他のファイルはまだソース ストアに残っているという状況が発生します。
このプロパティは、バイナリ ファイルのコピー シナリオでのみ有効です。 既定値: false。
いいえ
modifiedDatetimeStart ファイルはフィルター処理され、元になる属性は最終更新時刻です。
ファイルは、最終変更日時が modifiedDatetimeStart と同じかそれよりも後であり、modifiedDatetimeEnd よりも前である場合に選ばれます。 時刻は "2018-12-01T05:00:00Z" の形式で UTC タイム ゾーンに適用されます。
各プロパティには NULL を指定できます。これは、ファイル属性フィルターをデータセットに適用しないことを意味します。 modifiedDatetimeStart に datetime 値を設定し、modifiedDatetimeEnd を NULL にした場合は、最終更新時刻属性が datetime 値以上であるファイルが選択されることを意味します。 modifiedDatetimeEnd に datetime 値を設定し、modifiedDatetimeStart を NULL にした場合は、最終更新時刻属性が datetime 値以下であるファイルが選択されることを意味します。
fileListPath を構成する場合、このプロパティは適用されません。
いいえ
modifiedDatetimeEnd 上記と同じです。 いいえ
enablePartitionDiscovery パーティション分割されているファイルの場合は、ファイル パスのパーティションを解析し、それを追加のソース列として追加するかどうかを指定します。
指定できる値は false (既定値) と true です。
いいえ
partitionRootPath パーティション検出が有効になっている場合は、パーティション分割されたフォルダーをデータ列として読み取るための絶対ルート パスを指定します。

指定しない場合の既定は、以下のようになります。
- ソース上のデータセットまたはファイルの一覧内のファイル パスを使用する場合、パーティションのルート パスはそのデータセットで構成されているパスです。
- ワイルドカード フォルダー フィルターを使用する場合、パーティションのルート パスは最初のワイルドカードの前のサブパスです。

たとえば、データセット内のパスを "root/folder/year=2020/month=08/day=27" として構成するとします。
- パーティションのルート パスを "root/folder/year=2020" として指定した場合は、コピー アクティビティによって、ファイル内の列とは別に、それぞれ "08" と "27" の値を持つ monthday という 2 つの追加の列が生成されます。
- パーティションのルート パスを指定しない場合、追加の列は生成されません。
いいえ
maxConcurrentConnections アクティビティの実行中にデータ ストアに対して確立されたコンカレント接続数の上限。 コンカレント接続を制限する場合にのみ、値を指定します。 いいえ

例:

"activities":[
    {
        "name": "CopyFromADLSGen1",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<Delimited text input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "DelimitedTextSource",
                "formatSettings":{
                    "type": "DelimitedTextReadSettings",
                    "skipLineCount": 10
                },
                "storeSettings":{
                    "type": "AzureDataLakeStoreReadSettings",
                    "recursive": true,
                    "wildcardFolderPath": "myfolder*A",
                    "wildcardFileName": "*.csv"
                }
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

シンクとしての Azure Data Lake Store

Azure Data Factory では次のファイル形式がサポートされます。 形式ベースの設定については、各記事を参照してください。

Azure Data Lake Store Gen1 では、形式ベースのコピー シンクの storeSettings 設定において、次のプロパティがサポートされています。

プロパティ Description 必須
type storeSettings の type プロパティは AzureDataLakeStoreWriteSettings に設定する必要があります。 はい
copyBehavior ソースがファイル ベースのデータ ストアのファイルの場合は、コピー動作を定義します。

使用できる値は、以下のとおりです。
- PreserveHierarchy (既定値):ターゲット フォルダー内でファイル階層を保持します。 ソース フォルダーへのソース ファイルの相対パスはターゲット フォルダーへのターゲット ファイルの相対パスと同じになります。
- FlattenHierarchy:ソース フォルダーのすべてのファイルをターゲット フォルダーの第一レベルに配置します。 ターゲット ファイルは、自動生成された名前になります。
- MergeFiles:ソース フォルダーのすべてのファイルを 1 つのファイルにマージします。 ファイル名を指定した場合、マージされたファイル名は指定した名前になります。 それ以外は自動生成されたファイル名になります。
いいえ
expiryDateTime 書き込まれたファイルの有効期限を指定します。 時刻は "2020-03-01T08:00:00Z" の形式で UTC 時刻に適用されます。 既定では NULL になっています。これは、書き込まれたファイルの有効期限が切れないことを意味します。 いいえ
maxConcurrentConnections アクティビティの実行中にデータ ストアに対して確立されたコンカレント接続数の上限。 コンカレント接続を制限する場合にのみ、値を指定します。 いいえ

例:

"activities":[
    {
        "name": "CopyToADLSGen1",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<Parquet output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "ParquetSink",
                "storeSettings":{
                    "type": "AzureDataLakeStoreWriteSettings",
                    "copyBehavior": "PreserveHierarchy"
                }
            }
        }
    }
]

名前範囲フィルターの例

このセクションでは、名前範囲フィルターの結果動作について説明します。

サンプルのソース構造 構成 結果
root
    a
        file.csv
    ax
        file2.csv
    ax.csv
    b
        file3.csv
    bx.csv
    c
        file4.csv
    cx.csv
データセット内:
- フォルダー パス: root

コピー アクティビティ ソース内:
- List after: a
- List before: b
次に、以下のファイルがコピーされます。

root
    ax
        file2.csv
    ax.csv
    b
        file3.csv

フォルダーとファイル フィルターの例

このセクションでは、ワイルドカード フィルターを使用した結果のフォルダーのパスとファイル名の動作について説明します。

folderPath fileName recursive ソースのフォルダー構造とフィルターの結果 (太字のファイルが取得されます)
Folder* (空、既定値を使用) false FolderA
    File1.csv
    File2.json
    Subfolder1
        File3.csv
        File4.json
        File5.csv
AnotherFolderB
    File6.csv
Folder* (空、既定値を使用) true FolderA
    File1.csv
    File2.json
    Subfolder1
        File3.csv
        File4.json
        File5.csv
AnotherFolderB
    File6.csv
Folder* *.csv false FolderA
    File1.csv
    File2.json
    Subfolder1
        File3.csv
        File4.json
        File5.csv
AnotherFolderB
    File6.csv
Folder* *.csv true FolderA
    File1.csv
    File2.json
    Subfolder1
        File3.csv
        File4.json
        File5.csv
AnotherFolderB
    File6.csv

ファイル リストの例

このセクションでは、コピー アクティビティのソースでファイル リスト パスを使用した結果の動作について説明します。

次のソース フォルダー構造があり、太字のファイルをコピーするとします。

サンプルのソース構造 FileListToCopy.txt のコンテンツ 構成
root
    FolderA
        File1.csv
        File2.json
        Subfolder1
            File3.csv
            File4.json
            File5.csv
    メタデータ
        FileListToCopy.txt
File1.csv
Subfolder1/File3.csv
Subfolder1/File5.csv
データセット内:
- フォルダー パス: root/FolderA

コピー アクティビティ ソース内:
- ファイル リストのパス: root/Metadata/FileListToCopy.txt

ファイル リストのパスは、コピーするファイルの一覧を含む同じデータ ストア内のテキスト ファイルをポイントします。データセットで構成されているパスへの相対パスで 1 行につき 1 つのファイルを指定します。

コピー操作の動作の例

このセクションでは、コピー操作の動作から得られる結果を、recursive 値と copyBehavior 値の組み合わせごとに説明します。

recursive copyBehavior ソースのフォルダー構造 ターゲットの結果
true preserveHierarchy Folder1
    File1
    File2
    Subfolder1
        File3
        File4
        File5
ターゲット Folder1 は、ソースと同じ構造で作成されます。

Folder1
    File1
    File2
    Subfolder1
        File3
        File4
        File5.
true flattenHierarchy Folder1
    File1
    File2
    Subfolder1
        File3
        File4
        File5
ターゲットの Folder1 は、次の構造で作成されます。

Folder1
    File1 の自動生成された名前
    File2 の自動生成された名前
    File3 の自動生成された名前
    File4 の自動生成された名前
    File5 の自動生成された名前
true mergeFiles Folder1
    File1
    File2
    Subfolder1
        File3
        File4
        File5
ターゲットの Folder1 は、次の構造で作成されます。

Folder1
    File1、File2、File3、File4、File5 の内容は 1 つのファイルにマージされて、自動生成されたファイル名が付けられます。
false preserveHierarchy Folder1
    File1
    File2
    Subfolder1
        File3
        File4
        File5
ターゲットの Folder1 は、次の構造で作成されます。

Folder1
    File1
    File2

Subfolder1 と File3、File4、File5 は取得されません。
false flattenHierarchy Folder1
    File1
    File2
    Subfolder1
        File3
        File4
        File5
ターゲットの Folder1 は、次の構造で作成されます。

Folder1
    File1 の自動生成された名前
    File2 の自動生成された名前

Subfolder1 と File3、File4、File5 は取得されません。
false mergeFiles Folder1
    File1
    File2
    Subfolder1
        File3
        File4
        File5
ターゲットの Folder1 は、次の構造で作成されます。

Folder1
    File1、File2 の内容は 1 つのファイルにマージされ、自動生成されたファイル名が付けられます。 File1 の自動生成された名前

Subfolder1 と File3、File4、File5 は取得されません。

Data Lake Storage Gen2 に ACL を保持する

ヒント

Azure Data Lake Storage Gen1 から Gen2 への一般的なデータ コピーに関するチュートリアルとベスト プラクティスについては、Azure Data Lake Storage Gen1 から Gen2 へのデータのコピーに関する記事を参照してください。

Data Lake Storage Gen1 から Data Lake Storage Gen2 にアップグレードするときに、アクセス制御リスト (ACL) をデータ ファイルと共にレプリケートする必要がある場合は、「Data Lake Storage Gen1 の ACL を保持する」をご覧ください。

Mapping Data Flow のプロパティ

マッピング データ フローでデータを変換するときには、Azure Data Lake Storage Gen1 にある次の形式のファイルの読み取りと書き込みが可能です。

形式固有の設定は、各形式のドキュメントに記載されています。 詳細については、「マッピング データ フローのソース変換」および「マッピング データ フローでのシンク変換」を参照してください。

ソース変換

ソース変換では、Azure Data Lake Storage Gen1 内のコンテナー、フォルダー、または個々のファイルからの読み取りが可能です。 [Source options](ソース オプション) タブで、ファイルの読み取り方法を管理できます。

Screenshot of source options tab in mapping data flow source transformation.

ワイルドカード パス: ワイルドカード パターンを使用して、1 回のソース変換で、一致するフォルダーとファイルをそれぞれループ処理するようサービスに指示します。 これは、単一のフロー内の複数のファイルを処理するのに効果的な方法です。 既存のワイルドカード パターンをポイントしたときに表示される + 記号を使って複数のワイルドカード一致パターンを追加します。

ソース コンテナーから、パターンに一致する一連のファイルを選択します。 データセット内で指定できるのはコンテナーのみです。 そのため、ワイルドカード パスには、ルート フォルダーからのフォルダー パスも含める必要があります。

ワイルドカードの例:

  • * - 任意の文字セットを表します。

  • ** - ディレクトリの再帰的な入れ子を表します。

  • ? - 1 文字を置き換えます。

  • [] - 角カッコ内の文字のいずれか 1 つと一致します。

  • /data/sales/**/*.csv - /data/sales の下のすべての csv ファイルを取得します。

  • /data/sales/20??/**/ 一致するすべての 20xx フォルダー内のすべてのファイルを再帰的に取得します

  • /data/sales/*/*/*.csv - /data/sales の 2 レベル下の csv ファイルを取得します。

  • /data/sales/2004/12/[XY]1?.csv 2004 年 12 月から X または Y で始まり、その後に 1 が続くすべての CSV ファイルと任意の 1 文字を取得します

Partition root path: ファイル ソース内のフォルダーを key=value 形式 (例えば year=2019) で分割している場合、その分割フォルダー ツリーの最上位をデータ フローのデータ ストリームの列名に割り当てることができます。

最初に、ワイルドカードを設定して、パーティション分割されたフォルダーと読み取るリーフ ファイルのすべてのパスを含めます。

Screenshot of partition source file settings in mapping data flow source transformation.

パーティションのルート パス設定を使用して、フォルダー構造の最上位レベルを定義します。 データ プレビューでデータの内容を表示すると、各フォルダー レベルで見つかった解決済みのパーティションがサービスによって追加されることがわかります。

Partition root path

[List of files]: これはファイル セットです。 処理する相対パス ファイルの一覧を含むテキスト ファイルを作成します。 このテキスト ファイルをポイントします。

[Column to store file name](ファイル名を格納する列): ソース ファイルの名前をデータの列に格納します。 ファイル名文字列を格納するための新しい列名をここに入力します。

[After completion](完了後): データ フローの実行後にソース ファイルに何もしないか、ソース ファイルを削除するか、またはソース ファイルを移動することを選択します。 移動のパスは相対パスです。

後処理でソース ファイルを別の場所に移動するには、まず、ファイル操作の "移動" を選択します。 次に、"移動元" ディレクトリを設定します。 パスにワイルドカードを使用していない場合、[移転元] 設定はソース フォルダーと同じフォルダーになります。

ワイルドカードを含むソース パスがある場合、構文は次のようになります。

/data/sales/20??/**/*.csv

"移動元" は次のように指定できます。

/data/sales

"移動先" は次のように指定できます。

/backup/priorSales

この場合、ソースとして指定された /data/sales の下のすべてのファイルは /backup/priorSales に移動されます。

注意

ファイル操作は、パイプライン内のデータ フローの実行アクティビティを使用するパイプライン実行 (パイプラインのデバッグまたは実行) からデータ フローを開始する場合にのみ実行されます。 データ フロー デバッグ モードでは、ファイル操作は実行されません

[Filter by last modified](最終更新日時でフィルター処理): 最終更新日時の範囲を指定することで、処理するファイルをフィルター処理できます。 日時はすべて UTC 形式です。

変更データ キャプチャを有効にする: これが trueの場合、最後に実行したファイルからのみ新規または変更されたファイルを取得します。 最初の実行時には必ず完全なスナップショット データが読み込まれ、次の実行時には新規または変更されたファイルのみが読み込まれます。 詳細は、変更データ キャプチャ を参照してください。

Screenshot showing Enable change data capture.

シンクのプロパティ

シンク変換では、Azure Data Lake Storage Gen1 内のコンテナーまたはフォルダーに書き込むことができます。 [設定] タブで、ファイルの書き込み方法を管理できます。

sink options

Clear the folder(フォルダーのクリア):データが書き込まれる前に、書き込み先のフォルダーをクリアするかどうかを決定します。

File name option(ファイル名のオプション):書き込み先のフォルダー内の書き込み先ファイルの命名方法を決定します。 ファイル名のオプションを次に示します。

  • 既定:Spark は PART の既定値に基づいて、ファイルに名前を付けることができます。
  • パターン:パーティションごとに出力ファイルを列挙するパターンを入力します。 たとえば、loans[n].csv と入力すると、loans1.csv、loans2.csv のように作成されます。
  • Per partition(パーティションあたり):パーティションごとに 1 つのファイル名を入力します。
  • As data in column(列内のデータとして):出力ファイルを列の値に設定します。 パスは、書き込み先フォルダーではなく、データセット コンテナーからの相対パスです。 データセット内にフォルダー パスがある場合は、オーバーライドされます。
  • Output to a single file(1 つのファイルに出力する):パーティション分割された出力ファイルを単一の名前付きファイルに結合します。 パスは、データセット フォルダーからの相対パスです。 マージ操作は、ノードサイズによっては失敗する可能性があることに注意してください。 このオプションは、大規模なデータセットに対しては推奨されません。

Quote all(すべてを引用符で囲む):すべての値を引用符で囲むかどうかを決定します

Lookup アクティビティのプロパティ

プロパティの詳細については、Lookup アクティビティに関するページを参照してください。

GetMetadata アクティビティのプロパティ

プロパティの詳細については、GetMetadata アクティビティに関するページを参照してください。

Delete アクティビティのプロパティ

プロパティの詳細については、Delete アクティビティに関するページを参照してください。

レガシ モデル

注意

次のモデルは、下位互換性のために引き続きそのままサポートされます。 今後は、上記のセクションで説明した新しいモデルを使用することをお勧めします。作成 UI は、新しいモデルを生成するように切り替えられています。

レガシ データセット モデル

プロパティ Description 必須
type データセットの type プロパティには、AzureDataLakeStoreFile を設定する必要があります。 はい
folderPath Data Lake Store のフォルダーへのパス。 指定しないと、ルートが参照されます。

ワイルドカード フィルターがサポートされています。 使用できるワイルドカードは、* (ゼロ文字以上の文字に一致) と ? (ゼロ文字または 1 文字に一致) です。 実際のフォルダー名にワイルドカードまたはこのエスケープ文字が含まれている場合は、^ を使用してエスケープします。

例: rootfolder/subfolder/。 「フォルダーとファイル フィルターの例」の他の例をご覧ください。
いいえ
fileName 指定された "folderPath" の下にあるファイルの名前またはワイルドカード フィルター。 このプロパティの値を指定しない場合、データセットはフォルダー内のすべてのファイルをポイントします。

フィルターに使用できるワイルドカードは、* (ゼロ文字以上の文字に一致) と ? (ゼロ文字または 1 文字に一致) です。
- 例 1: "fileName": "*.csv"
- 例 2: "fileName": "???20180427.txt"
実際のファイル名にワイルドカードまたはこのエスケープ文字が含まれている場合は、^ を使用してエスケープします。

出力データセットに fileName の指定がなく、アクティビティ シンクに preserveHierarchy の指定がない場合、コピー アクティビティは、"Data.[activity run ID GUID].[GUID if FlattenHierarchy].[format if configured].[compression if configured] " というパターンでファイル名が自動的に生成されます (例: "Data.0a405f8a-93ff-4c6f-b3be-f69616f1df7a.txt.gz")。 クエリの代わりにテーブル名を使用して表形式のソースからコピーする場合、名前のパターンは " [table name].[format].[compression if configured] " となります。たとえば、"MyTable.csv" などです。
いいえ
modifiedDatetimeStart 最終変更日時属性に基づくファイル フィルター。 ファイルは、最終変更日時が modifiedDatetimeStart と同じかそれよりも後であり、modifiedDatetimeEnd よりも前である場合に選択されます。 時刻は "2018-12-01T05:00:00Z" の形式で UTC タイム ゾーンに適用されます。

大量のファイルでファイル フィルターを実行する場合、この設定を有効にすることで、データ移動の全体的なパフォーマンスが影響を受けます。

各プロパティには NULL を指定できます。これは、ファイル属性フィルターをデータセットに適用しないことを意味します。 modifiedDatetimeStart に datetime 値が設定されており、modifiedDatetimeEnd が NULL の場合は、最終変更日時属性が datetime 値以上であるファイルが選択されます。 modifiedDatetimeEnd に datetime 値が設定されており、modifiedDatetimeStart が NULL の場合は、最終変更日時属性が datetime 値以下であるファイルが選択されます。
いいえ
modifiedDatetimeEnd 最終変更日時属性に基づくファイル フィルター。 ファイルは、最終変更日時が modifiedDatetimeStart と同じかそれよりも後であり、modifiedDatetimeEnd よりも前である場合に選択されます。 時刻は "2018-12-01T05:00:00Z" の形式で UTC タイム ゾーンに適用されます。

大量のファイルでファイル フィルターを実行する場合、この設定を有効にすることで、データ移動の全体的なパフォーマンスが影響を受けます。

各プロパティには NULL を指定できます。これは、ファイル属性フィルターをデータセットに適用しないことを意味します。 modifiedDatetimeStart に datetime 値が設定されており、modifiedDatetimeEnd が NULL の場合は、最終変更日時属性が datetime 値以上であるファイルが選択されます。 modifiedDatetimeEnd に datetime 値が設定されており、modifiedDatetimeStart が NULL の場合は、最終変更日時属性が datetime 値以下であるファイルが選択されます。
いいえ
format ファイルベースのストア間でファイルをそのままコピー (バイナリ コピー) する場合は、入力と出力の両方のデータセット定義で format セクションをスキップします。

特定の形式のファイルを解析または生成する場合、サポートされるファイル形式の種類は、TextFormatJsonFormatAvroFormatOrcFormatParquetFormatformattype プロパティをいずれかの値に設定します。 詳細については、Text 形式Json 形式Avro 形式Orc 形式Parquet 形式 の各セクションを参照してください。
いいえ (バイナリ コピー シナリオのみ)
compression データの圧縮の種類とレベルを指定します。 詳細については、サポートされるファイル形式と圧縮コーデックに関する記事を参照してください。
サポートされる種類は、GZipDeflateBZip2、および ZipDeflate です。
サポートされるレベルは、OptimalFastest です。
いいえ

ヒント

フォルダーの下のすべてのファイルをコピーするには、folderPath のみを指定します。
特定の名前が付いた単一のファイルをコピーするには、フォルダー部分で folderPath、ファイル名で fileName を指定します。
フォルダーの下のファイルのサブセットをコピーするには、フォルダー部分で folderPath、ワイルドカード フィルターで fileName を指定します。

例:

{
    "name": "ADLSDataset",
    "properties": {
        "type": "AzureDataLakeStoreFile",
        "linkedServiceName":{
            "referenceName": "<ADLS linked service name>",
            "type": "LinkedServiceReference"
        },
        "typeProperties": {
            "folderPath": "datalake/myfolder/",
            "fileName": "*",
            "modifiedDatetimeStart": "2018-12-01T05:00:00Z",
            "modifiedDatetimeEnd": "2018-12-01T06:00:00Z",
            "format": {
                "type": "TextFormat",
                "columnDelimiter": ",",
                "rowDelimiter": "\n"
            },
            "compression": {
                "type": "GZip",
                "level": "Optimal"
            }
        }
    }
}

レガシ コピー アクティビティ ソース モデル

プロパティ Description 必須
type コピー アクティビティのソースの type プロパティは AzureDataLakeStoreSource に設定する必要があります。 はい
recursive データをサブフォルダーから再帰的に読み取るか、指定したフォルダーからのみ読み取るかを指定します。 recursive が true に設定されていて、シンクがファイル ベースのストアである場合、シンクでは空のフォルダーまたはサブフォルダーがコピーも作成もされません。 使用可能な値: true (既定値) および false いいえ
maxConcurrentConnections アクティビティの実行中にデータ ストアに対して確立されたコンカレント接続数の上限。 コンカレント接続を制限する場合にのみ、値を指定します。 いいえ

例:

"activities":[
    {
        "name": "CopyFromADLSGen1",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<ADLS Gen1 input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "AzureDataLakeStoreSource",
                "recursive": true
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

レガシ コピー アクティビティ シンク モデル

プロパティ Description 必須
type コピー アクティビティのシンクの type プロパティは、AzureDataLakeStoreSink に設定する必要があります。 はい
copyBehavior ソースがファイル ベースのデータ ストアのファイルの場合は、コピー動作を定義します。

使用できる値は、以下のとおりです。
- PreserveHierarchy (既定値):ターゲット フォルダー内でファイル階層を保持します。 ソース フォルダーへのソース ファイルの相対パスはターゲット フォルダーへのターゲット ファイルの相対パスと同じになります。
- FlattenHierarchy:ソース フォルダーのすべてのファイルをターゲット フォルダーの第一レベルに配置します。 ターゲット ファイルは、自動生成された名前になります。
- MergeFiles:ソース フォルダーのすべてのファイルを 1 つのファイルにマージします。 ファイル名を指定した場合、マージされたファイル名は指定した名前になります。 指定しないと、ファイル名は自動生成されます。
いいえ
maxConcurrentConnections アクティビティの実行中にデータ ストアに対して確立されたコンカレント接続数の上限。 コンカレント接続を制限する場合にのみ、値を指定します。 いいえ

例:

"activities":[
    {
        "name": "CopyToADLSGen1",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<ADLS Gen1 output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "AzureDataLakeStoreSink",
                "copyBehavior": "PreserveHierarchy"
            }
        }
    }
]

変更データ キャプチャ (プレビュー)

Azure Data Factory は、マッピング データ フローのソース変換で変更データ キャプチャを有効にする (プレビュー) を有効にすることで、Azure Data Lake Storage Gen1 からのみ新規または変更されたファイルを取得できます。 このコネクタ オプションを使用すると、変換されたデータを選択した変換先データセットに読み込む前に、新しいファイルまたは更新されたファイルのみを読み取り、変換を適用できます。

最後の実行からチェックポイントを常に記録して、そこから変更を取得できるよう、パイプラインとアクティビティ名は変更しないでください。 パイプライン名またはアクティビティ名を変更すると、チェックポイントがリセットされ、次の実行は最初から開始されます。

パイプラインをデバッグする場合は、変更データ キャプチャを有効にする (プレビュー) も同様に機能します。 デバッグ実行中にブラウザーを更新すると、チェックポイントがリセットされます。 デバッグ実行の結果に問題がなければ、パイプラインを発行してトリガーできます。 デバッグ実行によって記録された以前のチェックポイントに関係なく、常に先頭から開始されます。

[モニター] セクションでは、常にパイプラインを再実行できます。 そうすると、選択したパイプライン実行のチェックポイント レコードから常に変更点が取得されます。

Copy アクティビティでソースおよびシンクとしてサポートされるデータ ストアの一覧については、サポートされるデータ ストアに関するセクションを参照してください。