Azure Data Factory を使用して REST エンドポイントとの間でデータをコピーおよび変換する

適用対象: Azure Data Factory Azure Synapse Analytics

ヒント

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

この記事では、Azure Data Factory の Copy アクティビティを使用して、REST エンドポイントとの間でデータコピーする方法について説明します。 この記事は、コピー アクティビティの概要が説明されている「Azure Data Factory のコピー アクティビティ」を基に作成されています。

この REST コネクタ、HTTP コネクタ、および Web テーブル コネクタの違いは次のとおりです。

  • REST コネクタでは、特に RESTful API からのデータのコピーがサポートされます。
  • HTTP コネクタは、ファイルをダウンロードするなど、任意の HTTP エンドポイントからデータを取得するための一般的なものです。 この REST コネクタの前に、HTTP コネクタを使用して RESTful API からデータをコピーする場合があります。これはサポートされますが、REST コネクタと比べると機能は低くなります。
  • Web テーブル コネクタでは、HTML Web ページからテーブルの内容を抽出します。

サポートされる機能

この REST コネクタでは、次の機能がサポートされます。

サポートされる機能 IR
Copy アクティビティ (ソース/シンク) ① ②
マッピング データ フロー (ソース/シンク)

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

ソースおよびシンクとしてサポートされているデータ ストアの一覧については、「サポートされているデータ ストア」を参照してください。

具体的には、この汎用 REST コネクタは以下をサポートします。

  • GET または POST メソッドを使用した REST エンド ポイントからのデータのコピー、および POSTPUT または PATCH メソッドを使用した REST エンドポイントへのデータのコピー。
  • 匿名基本サービス プリンシパルOAuth2 クライアント資格情報システム割り当てマネージド IDユーザー割り当てマネージド ID のいずれかの認証を使用したデータのコピー。
  • REST API 内の 改ページ位置の自動修正
  • ソースとしての REST の場合、REST JSON 応答をそのままコピーするか、スキーマ マッピングを使用して解析する。 JSON では応答ペイロードのみがサポートされます。

ヒント

Data Factory で REST コネクタを構成する前に、データ取得のために要求をテストするには、ヘッダーおよび本文の要件に関する API 仕様を確認してください。 Visual Studio、PowerShell の Invoke-RestMethod、Web ブラウザーなどのツールを使用して検証を行うことができます。

前提条件

データ ストアがオンプレ ミスネットワーク、Azure 仮想ネットワーク、または Amazon Virtual Private Cloud 内にある場合は、それに接続するようセルフホステッド統合ランタイムを構成する必要があります。

データ ストアがマネージド クラウド データ サービスである場合は、Azure Integration Runtime を使用できます。 ファイアウォール規則で承認されている IP にアクセスが制限されている場合は、Azure Integration Runtime の IP を許可リストに追加できます。

また、Azure Data Factory のマネージド仮想ネットワーク統合ランタイム機能を使用すれば、セルフホステッド統合ランタイムをインストールして構成しなくても、オンプレミス ネットワークにアクセスすることができます。

Data Factory によってサポートされるネットワーク セキュリティ メカニズムやオプションの詳細については、「データ アクセス戦略」を参照してください。

はじめに

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

UI を使用して REST のリンク サービスを作成する

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

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

  2. REST を検索し、REST コネクタを選択します。

    REST コネクタを選択します。

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

    REST のリンク サービスを構成します。

コネクタの構成の詳細

次のセクションでは、REST コネクタに固有の Data Factory エンティティの定義に使用できるプロパティについて詳しく説明します。

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

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

プロパティ 内容 必須
type type プロパティには RestService を設定する必要があります。 はい
url REST サービスのベース URL。 はい
enableServerCertificateValidation エンドポイントに接続するときに、サーバー側の TLS/SSL 証明書を検証するかどうか。 いいえ
(既定値は true です)。
authenticationType REST サービスへの接続に使用される認証の種類。 使用できる値は、AnonymousBasicAadServicePrincipalOAuth2ClientCredentialManagedServiceIdentity です。 authHeaders プロパティで認証ヘッダーを追加で構成することもできます。 それぞれのプロパティとサンプルについては、以下の対応するセクションを参照してください。 はい
authHeaders 追加の認証用 HTTP 要求ヘッダー。
たとえば、API キー認証を使うには、認証の種類として "匿名" を選択し、ヘッダーに API キーを指定します。
いいえ
connectVia データ ストアに接続するために使用される Integration Runtime。 詳細については、「前提条件」セクションを参照してください。 指定されていない場合は、既定の Azure Integration Runtime が使用されます。 いいえ

各種の認証の種類については、対応するセクションで詳細を参照してください。

基本認証を使用する

authenticationType プロパティを Basic に設定します。 前のセクションで説明した汎用的なプロパティに加えて、次のプロパティを指定します。

プロパティ 内容 必要
userName REST エンドポイントにアクセスするために使用するユーザー名。 はい
password ユーザー (userName 値) のパスワード。 Data Factory に安全に格納するには、このフィールドを SecureString 型として指定します。 Azure Key Vault に格納されているシークレットを参照することもできます。 はい

{
    "name": "RESTLinkedService",
    "properties": {
        "type": "RestService",
        "typeProperties": {
            "authenticationType": "Basic",
            "url" : "<REST endpoint>",
            "userName": "<user name>",
            "password": {
                "type": "SecureString",
                "value": "<password>"
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

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

authenticationType プロパティを AadServicePrincipal に設定します。 前のセクションで説明した汎用的なプロパティに加えて、次のプロパティを指定します。

プロパティ 内容 必須
servicePrincipalId Microsoft Entra アプリケーションのクライアント ID を指定します。 はい
servicePrincipalCredentialType サービス プリンシパル認証に使用する資格情報の種類を指定します。 使用できる値は ServicePrincipalKeyServicePrincipalCert です。 いいえ
ServicePrincipalKey に関して
servicePrincipalKey Microsoft Entra アプリケーションのキーを指定します。 このフィールドを SecureString としてマークして Data Factory に安全に保管するか、Azure Key Vault に格納されているシークレットを参照します。 いいえ
ServicePrincipalCert に関して
servicePrincipalEmbeddedCert Microsoft Entra ID に登録されているアプリケーションの base64 でエンコードされた証明書を指定し、証明書のコンテンツ タイプが PKCS #12 であることを確認します。 このフィールドを SecureString とマークして安全に保存するか、Azure Key Vault に保存されているシークレットを参照します。 証明書を Azure Key Vault に保存する方法については、こちらのセクションを参照してください。 いいえ
servicePrincipalEmbeddedCertPassword 証明書がパスワードで保護されている場合は、証明書のパスワードを指定します。 このフィールドを SecureString とマークして安全に保存するか、Azure Key Vault に保存されているシークレットを参照します。 いいえ
tenant アプリケーションが存在するテナントの情報 (ドメイン名またはテナント ID) を指定します。 Azure portal の右上隅にマウスを置くことで取得します。 はい
aadResourceId 認可を要求する Microsoft Entra リソースを指定します (たとえば、https://management.core.windows.net)。 はい
azureCloudType サービス プリンシパル認証用に、Microsoft Entra アプリケーションが登録されている Azure クラウド環境の種類を指定します。
指定できる値は、AzurePublicAzureChinaAzureUsGovernment、および AzureGermany です。 既定では、データ ファクトリのクラウド環境が使用されます。
いいえ

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

{
    "name": "RESTLinkedService",
    "properties": {
        "type": "RestService",
        "typeProperties": {
            "url": "<REST endpoint e.g. https://www.example.com/>",
            "authenticationType": "AadServicePrincipal",
            "servicePrincipalId": "<service principal id>",
            "servicePrincipalCredentialType": "ServicePrincipalKey",
            "servicePrincipalKey": {
                "value": "<service principal key>",
                "type": "SecureString"
            },
            "tenant": "<tenant info, e.g. microsoft.onmicrosoft.com>",
            "aadResourceId": "<Azure AD resource URL e.g. https://management.core.windows.net>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

例 2: サービス プリンシパル証明書認証を使用する

{
    "name": "RESTLinkedService",
    "properties": {
        "type": "RestService",
        "typeProperties": {
            "url": "<REST endpoint e.g. https://www.example.com/>",
            "authenticationType": "AadServicePrincipal",
            "servicePrincipalId": "<service principal id>",
            "servicePrincipalCredentialType": "ServicePrincipalCert",
            "servicePrincipalEmbeddedCert": {
                "type": "SecureString",
                "value": "<the base64 encoded certificate of your application registered in Microsoft Entra ID>"
            },
            "servicePrincipalEmbeddedCertPassword": {
                "type": "SecureString",
                "value": "<password of your certificate>"
            },
            "tenant": "<tenant info, e.g. microsoft.onmicrosoft.com>",
            "aadResourceId": "<Azure AD resource URL e.g. https://management.core.windows.net>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

サービス プリンシパル証明書を Azure Key Vault に保存する

サービス プリンシパル証明書を Azure Key Vault に保存するには、次の 2 つのオプションがあります。

  • 方法 1

    1. サービス プリンシパル証明書を base64 文字列に変換します。 詳しくは、こちらの記事をご覧ください。

    2. base64 文字列をシークレットとして Azure Key Vault に保存します。

      シークレットのスクリーンショット。

      シークレット値のスクリーンショット。

  • オプション 2

    Azure Key Vault から証明書をダウンロードできない場合は、こちらのテンプレートを使用して、変換されたサービス プリンシパル証明書をシークレットとして Azure Key Vault に保存できます。

    サービス プリンシパル証明書をシークレットとして AKV に保存するためのテンプレート パイプラインのスクリーンショット。

OAuth2 クライアント資格情報認証を使用する

authenticationType プロパティを OAuth2ClientCredential に設定します。 前のセクションで説明した汎用的なプロパティに加えて、次のプロパティを指定します。

プロパティ 内容 必須
tokenEndpoint アクセス トークンを取得するための承認サーバーのトークン エンドポイント。 はい
clientId アプリケーションに関連するクライアント ID。 はい
clientSecret アプリケーションに関連するクライアント シークレット。 Data Factory に安全に格納するには、このフィールドを SecureString 型として指定します。 Azure Key Vault に格納されているシークレットを参照することもできます。 はい
scope 必要なアクセスのスコープ。 要求されるアクセスの種類について説明します。 いいえ
resource アクセスが要求される対象のターゲット サービスまたはリソース。 いいえ

{
    "name": "RESTLinkedService",
    "properties": {
        "type": "RestService",
        "typeProperties": {
            "url": "<REST endpoint e.g. https://www.example.com/>",
            "enableServerCertificateValidation": true,
            "authenticationType": "OAuth2ClientCredential",
            "clientId": "<client ID>",
            "clientSecret": {
                "type": "SecureString",
                "value": "<client secret>"
            },
            "tokenEndpoint": "<token endpoint>",
            "scope": "<scope>",
            "resource": "<resource>"
        }
    }
}

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

authenticationType プロパティを ManagedServiceIdentity に設定します。 前のセクションで説明した汎用的なプロパティに加えて、次のプロパティを指定します。

プロパティ 内容 必須
aadResourceId 認可を要求する Microsoft Entra リソースを指定します (たとえば、https://management.core.windows.net)。 はい

{
    "name": "RESTLinkedService",
    "properties": {
        "type": "RestService",
        "typeProperties": {
            "url": "<REST endpoint e.g. https://www.example.com/>",
            "authenticationType": "ManagedServiceIdentity",
            "aadResourceId": "<AAD resource URL e.g. https://management.core.windows.net>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

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

authenticationType プロパティを ManagedServiceIdentity に設定します。 前のセクションで説明した汎用的なプロパティに加えて、次のプロパティを指定します。

プロパティ 内容 必須
aadResourceId 認可を要求する Microsoft Entra リソースを指定します (たとえば、https://management.core.windows.net)。 はい
資格情報 ユーザー割り当てマネージド ID を資格情報オブジェクトとして指定します。 はい

{
    "name": "RESTLinkedService",
    "properties": {
        "type": "RestService",
        "typeProperties": {
            "url": "<REST endpoint e.g. https://www.example.com/>",
            "authenticationType": "ManagedServiceIdentity",
            "aadResourceId": "<Azure AD resource URL e.g. https://management.core.windows.net>",
            "credential": {
                "referenceName": "credential1",
                "type": "CredentialReference"
            }    
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

認証ヘッダーの使用

また、組み込みの認証の種類と共に、認証用の要求ヘッダーを構成できます。

例: API キー認証の使用

{
    "name": "RESTLinkedService",
    "properties": {
        "type": "RestService",
        "typeProperties": {
            "url": "<REST endpoint>",
            "authenticationType": "Anonymous",
            "authHeaders": {
                "x-api-key": {
                    "type": "SecureString",
                    "value": "<API key>"
                }
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

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

このセクションでは、REST データセットでサポートされているプロパティの一覧を示します。

データセットの定義に使用できるセクションとプロパティの完全な一覧については、「データセットとリンクされたサービス」を参照してください。

REST からのデータ コピーについては、次のプロパティがサポートされています。

プロパティ 内容 必須
type データセットの type プロパティを RestResource に設定する必要があります。 はい
relativeUrl データを含むリソースへの相対 URL。 このプロパティが指定されていない場合は、リンクされたサービス定義に指定されている URL のみが使用されます。 HTTP コネクタは、次の結合された URL からデータをコピーします。[URL specified in linked service]/[relative URL specified in dataset] いいえ

データセットに requestMethodadditionalHeadersrequestBodypaginationRules を設定していた場合は現状のまま引き続きサポートされますが、今後のアクティビティでは新しいモデルを使用することをお勧めします。

例:

{
    "name": "RESTDataset",
    "properties": {
        "type": "RestResource",
        "typeProperties": {
            "relativeUrl": "<relative url>"
        },
        "schema": [],
        "linkedServiceName": {
            "referenceName": "<REST linked service name>",
            "type": "LinkedServiceReference"
        }
    }
}

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

このセクションでは、REST のソースとシンクでサポートされるプロパティの一覧を示します。

アクティビティの定義に利用できるセクションとプロパティの完全な一覧については、パイプラインに関する記事を参照してください。

ソースとしての REST

コピー アクティビティの source セクションでは、次のプロパティがサポートされます。

プロパティ 内容 必須
type コピー アクティビティのソースの type プロパティを RestSource に設定する必要があります はい
requestMethod HTTP メソッド。 使用できる値は、GET (既定値) と POST です。 いいえ
additionalHeaders 追加の HTTP 要求ヘッダー。 いいえ
requestBody HTTP 要求の本文。 いいえ
paginationRules 次のページ要求を作成する改ページ位置の自動修正規則。 詳細については、「pagination support」(改ページ位置の自動調整のサポート) セクションを参照してください。 いいえ
httpRequestTimeout HTTP 要求が応答を取得する際のタイムアウト (TimeSpan 値)。 この値は、応答データの読み取りのタイムアウトではなく、応答の取得のタイムアウトです。 既定値は 00:01:40 です。 いいえ
requestInterval 次のページに対する要求を送信する前に待機する時間。 既定値は 00:00:01 です。 いいえ

注意

REST コネクタは、additionalHeaders で指定された "Accept" ヘッダーをすべて無視します。 REST コネクタは JSON の応答のみをサポートし、Accept: application/json のヘッダーを自動生成します。
応答本文としてのオブジェクトの配列は、改ページ位置の自動修正ではサポートされていません。

例 1: 改ページ位置の自動修正で Get メソッドを使用する

"activities":[
    {
        "name": "CopyFromREST",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<REST input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "RestSource",
                "additionalHeaders": {
                    "x-user-defined": "helloworld"
                },
                "paginationRules": {
                    "AbsoluteUrl": "$.paging.next"
                },
                "httpRequestTimeout": "00:01:00"
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

例 2: Post メソッドを使用する

"activities":[
    {
        "name": "CopyFromREST",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<REST input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "RestSource",
                "requestMethod": "Post",
                "requestBody": "<body for POST REST request>",
                "httpRequestTimeout": "00:01:00"
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

シンクとしての REST

コピー アクティビティの sink セクションでは、次のプロパティがサポートされます。

プロパティ 内容 必須
type Copy アクティビティのシンクの type プロパティには RestSink を設定する必要があります。 はい
requestMethod HTTP メソッド。 使用できる値は、POST (既定値)、PUT、および PATCH です。 いいえ
additionalHeaders 追加の HTTP 要求ヘッダー。 いいえ
httpRequestTimeout HTTP 要求が応答を取得する際のタイムアウト (TimeSpan 値)。 この値は、データの書き込みのタイムアウトではなく、応答の取得のタイムアウトです。 既定値は 00:01:40 です。 いいえ
requestInterval 異なる要求間の間隔時間 (ミリ秒単位)。 要求間隔の値は、[10, 60000] の間の数値にする必要があります。 いいえ
httpCompressionType 最適な圧縮レベルでデータを送信するときに使用する HTTP 圧縮の種類。 使用できる値は nonegzip です。 いいえ
writeBatchSize バッチごとに REST シンクに書き込むレコードの数。 既定値は 10000 です。 いいえ

シンクとしての REST コネクタは、JSON を受け入れる REST API と連携します。 データは次のパターンで JSON で送信されます。 必要に応じて、コピー アクティビティ スキーマ マッピングを使用し、REST API によって求められるペイロードに準拠するようにソース データを整形できます。

[
    { <data object> },
    { <data object> },
    ...
]

例:

"activities":[
    {
        "name": "CopyToREST",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<REST output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "RestSink",
                "requestMethod": "POST",
                "httpRequestTimeout": "00:01:40",
                "requestInterval": 10,
                "writeBatchSize": 10000,
                "httpCompressionType": "none",
            },
        }
    }
]

Mapping Data Flow のプロパティ

REST は、統合データセットとインライン データセットの両方のデータ フローでサポートされています。

ソース変換

プロパティ 内容 必須
requestMethod HTTP メソッド。 使用できる値は GETPOST です。 はい
relativeUrl データを含むリソースへの相対 URL。 このプロパティが指定されていない場合は、リンクされたサービス定義に指定されている URL のみが使用されます。 HTTP コネクタは、次の結合された URL からデータをコピーします。[URL specified in linked service]/[relative URL specified in dataset] いいえ
additionalHeaders 追加の HTTP 要求ヘッダー。 いいえ
httpRequestTimeout HTTP 要求が応答を取得する際のタイムアウト (TimeSpan 値)。 この値は、データの書き込みのタイムアウトではなく、応答の取得のタイムアウトです。 既定値は 00:01:40 です。 いいえ
requestInterval 異なる要求間の間隔時間 (ミリ秒単位)。 要求間隔の値は、[10, 60000] の間の数値にする必要があります。 いいえ
QueryParameters.request_query_parameter または QueryParameters['request_query_parameter'] "request_query_parameter" は、次の HTTP 要求 URL 内で 1 つのクエリ パラメーター名を参照するユーザー定義です。 いいえ

シンク変換

プロパティ 内容 必須
additionalHeaders 追加の HTTP 要求ヘッダー。 いいえ
httpRequestTimeout HTTP 要求が応答を取得する際のタイムアウト (TimeSpan 値)。 この値は、データの書き込みのタイムアウトではなく、応答の取得のタイムアウトです。 既定値は 00:01:40 です。 いいえ
requestInterval 異なる要求間の間隔時間 (ミリ秒単位)。 要求間隔の値は、[10, 60000] の間の数値にする必要があります。 いいえ
httpCompressionType 最適な圧縮レベルでデータを送信するときに使用する HTTP 圧縮の種類。 使用できる値は nonegzip です。 いいえ
writeBatchSize バッチごとに REST シンクに書き込むレコードの数。 既定値は 10000 です。 いいえ

削除、挿入、更新、アップサートの各メソッドと、CRUD 操作のために REST シンクに送信する相対行データを設定できます。

データ フロー REST シンク

データ フロー スクリプトのサンプル

シンクの前に行の変更変換を使用して、REST シンクで実行するアクションの種類 (挿入、更新、アップサート、削除) を ADF に指示します。

AlterRow1 sink(allowSchemaDrift: true,
	validateSchema: false,
	deletable:true,
	insertable:true,
	updateable:true,
	upsertable:true,
	rowRelativeUrl: 'periods',
	insertHttpMethod: 'PUT',
	deleteHttpMethod: 'DELETE',
	upsertHttpMethod: 'PUT',
	updateHttpMethod: 'PATCH',
	timeout: 30,
	requestFormat: ['type' -> 'json'],
	skipDuplicateMapInputs: true,
	skipDuplicateMapOutputs: true) ~> sink1

改ページ位置の自動調整のサポート

REST API からデータをコピーするとき、通常、REST API では、1 つの要求の応答ペイロードのサイズが適切な数値を超えないように制限されています。大量のデータが返される場合は、結果が複数のページに分割され、呼び出し元に連続する要求を送信して結果の次のページを取得することが要求されます。 通常、1 つのページに対する要求は動的で、前のページの応答から返される情報で構成されます。

この汎用 REST コネクタでは、次の改ページ位置の自動修正パターンをサポートしています。

  • 次の要求の絶対または相対 URL = 現在の応答本文のプロパティ値
  • 次の要求の絶対または相対 URL = 現在の応答ヘッダーのヘッダー値
  • 次の要求のクエリ パラメーター = 現在の応答本文のプロパティ値
  • 次の要求のクエリ パラメーター = 現在の応答ヘッダーのヘッダー値
  • 次の要求のヘッダー = 現在の応答本文のプロパティ値
  • 次の要求のヘッダー = 現在の応答ヘッダーのヘッダー値

改ページ位置の自動修正規則はデータセット内のディクショナリとして定義されます。これには、大文字と小文字が区別される、1 つまたは複数のキーと値のペアが含まれます。 構成は 2 番目のページから始まる要求を生成するのに使用されます。 コネクタで HTTP 状態コード 204 (コンテンツなし) が取得されるか、"paginationRules" 内のいずれかの JSONPath 式で null が返されると、繰り返し処理が停止されます。

改ページ位置の自動修正規則でサポートされるキー:

Key 説明
AbsoluteUrl 次の要求を発行する URL を示します。 これは、絶対 URL と相対 URL のどちらかです。
QueryParameters.request_query_parameter または QueryParameters['request_query_parameter'] "request_query_parameter" は、次の HTTP 要求 URL 内で 1 つのクエリ パラメーター名を参照するユーザー定義です。
Headers.request_header または Headers['request_header'] "request_header" は、次の HTTP 要求内で 1 つのヘッダー名を参照するユーザー定義です。
EndCondition:end_condition "end_condition" は、次の HTTP 要求で改ページ ループを終了させる条件を示すユーザー定義です。
MaxRequestNumber 改ページ要求の最大数を示します。 これを空のままにすると、制限がなくなります。
SupportRFC5988 既定では、改ページ規則が定義されていない場合、これは true に設定されます。 この規則を無効にするには、supportRFC5988 を false に設定するか、スクリプトからこのプロパティを削除します。

改ページ位置の自動修正規則でサポートされる値:

説明
Headers.response_header または Headers['response_header'] "response_header" は、現在の HTTP 応答内で 1 つのヘッダー名を参照するユーザー定義で、その値は、次の要求を発行するために使用されます。
(応答本文のルートを表す) "$" から始まる JSONPath 式 応答本文には 1 つの JSON オブジェクトのみを含める必要があります。応答本文としてのオブジェクトの配列はサポートされていません。 JSONPath 式では、1 つのプリミティブ値が返される必要があります。この値は、次の要求を発行するために使用されます。

注意

マッピング データ フローの改ページ規則は、次のアスペクトで Copy アクティビティとは異なります。

  1. 範囲は、マッピング データ フローではサポートされていません。
  2. [''] は、マッピング データ フローではサポートされていません。 代わりに、{} を使用して特殊文字をエスケープします。 たとえば、body.{@odata.nextLink}、JSON ノード@odata.nextLinkに特殊文字が含まれているとします.
  3. 終了条件はマッピング データ フローでサポートされますが、条件の構文は Copy アクティビティの場合とは異なります。 body は、$ ではなく応答本文を示すために使用されます。 header は、headers ではなく応答ヘッダーを示すために使用されます。 この違いを示す 2 つの例を次に示します。
    • 例 1:
      Copy アクティビティ: "EndCondition:$.data": "Empty"
      マッピング データ フロー: "EndCondition:body.data": "Empty"
    • 例 2:
      Copy アクティビティ: "EndCondition:headers.complete": "Exist"
      マッピング データ フロー: "EndCondition:body.data": "Empty"

改ページ規則の例

このセクションでは、改ページ規則の設定の例の一覧を示します。

例 1: QueryParameters の変数

この例では、QueryParameters に変数が含まれる複数の要求を送信する構成手順を示します。

複数の要求:

baseUrl/api/now/table/incident?sysparm_limit=1000&sysparm_offset=0,
baseUrl/api/now/table/incident?sysparm_limit=1000&sysparm_offset=1000,
...... 
baseUrl/api/now/table/incident?sysparm_limit=1000&sysparm_offset=10000

手順 1: 次のスクリーンショットに示すように、ベース URL または相対 URLsysparm_offset={offset} を入力します。

クエリ パラメーターに変数がある複数の要求を送信するための 1 つの構成を示すスクリーンショット。

または

クエリ パラメーターに変数がある複数の要求を送信するための別の構成を示すスクリーンショット。

手順 2: 改ページ規則をオプション 1 またはオプション 2 として次のように設定します。

  • オプション 1: "QueryParameters.{offset}" : "RANGE:0:10000:1000"

  • オプション 2: "AbsoluteUrl.{offset}" : "RANGE:0:10000:1000"

例 2 : AbsoluteUrl の変数

この例では、AbsoluteUrl に変数が含まれる複数の要求を送信する構成手順を示します。

複数の要求:

BaseUrl/api/now/table/t1
BaseUrl/api/now/table/t2
...... 
BaseUrl/api/now/table/t100

手順 1: リンクされたサービス構成ページの [ベース URL ] またはデータセット接続ウィンドウの [相対 URL] のどちらかに {id} を入力します。

絶対 URL に変数がある複数の要求を送信するための 1 つの構成を示すスクリーンショット。

または

絶対 URL に変数がある複数の要求を送信するための別の構成を示すスクリーンショット。

手順 2: 改ページ規則"AbsoluteUrl.{id}" :"RANGE:1:100:1" として設定します。

例 3: ヘッダー内の変数

この例では、Headers に変数が含まれる複数の要求を送信する構成手順を示します。

複数の要求:
RequestUrl: https://example/table
Request 1: Header(id->0)
Request 2: Header(id->10)
......
Request 100: Header(id->100)

手順 1: [追加のヘッダー]{id} を入力します。

手順 2: 改ページ規則"Headers.{id}" : "RANGE:0:100:10" として設定します。

ヘッダーに変数がある複数の要求を送信するための改ページ規則を示すスクリーンショット。

例 4: 変数は AbsoluteUrl/QueryParameters/Headers に含まれています。終了変数は事前に定義されておらず、終了条件は応答に基づいています

この例では、変数は AbsoluteUrl/QueryParameters/Headers にありますが、終了変数が定義されていない複数の要求を送信する構成手順を示します。 異なる応答ごとに、異なる終了条件ルールの設定が「例 4.1-4.6」に示されています。

複数の要求:

Request 1: baseUrl/api/now/table/incident?sysparm_limit=1000&sysparm_offset=0, 
Request 2: baseUrl/api/now/table/incident?sysparm_limit=1000&sysparm_offset=1000,
Request 3: baseUrl/api/now/table/incident?sysparm_limit=1000&sysparm_offset=2000,
...... 

この例では、次の 2 つの応答が発生しました。

応答 1:

{
    Data: [
        {key1: val1, key2: val2
        },
        {key1: val3, key2: val4
        }
    ]
}

応答 2:

{
    Data: [
        {key1: val5, key2: val6
        },
        {key1: val7, key2: val8
        }
    ]
}

手順 1: 改ページ規則の範囲を例 1 として設定し、"AbsoluteUrl.{offset}": "RANGE:0::1000" として範囲の末尾を空にしておきます。

手順 2: 最後の応答ごとに異なる終了条件ルールを設定します。 次の例を参照してください。

  • 例 4.1: 応答の特定のノードの値が空の場合に改ページが終了する

    REST API は、次の構造体の最後の応答を返します。

    {
        Data: []
    }
    

    応答の特定のノードの値が空の場合に改ページ調整を終了するには、終了条件ルールを "EndCondition:$.data": "Empty" に設定します。

    例 4.1 の終了条件の設定を示すスクリーンショット。

  • 例 4.2: 応答の特定のノードの値が存在しない場合に改ページが終了する

    REST API は、次の構造体の最後の応答を返します。

    {}
    

    応答の特定のノードの値が存在しない場合に改ページ調整を終了するには、終了条件ルールを "EndCondition:$.data": "NonExist" に設定します。

    例 4.2 の終了条件の設定を示すスクリーンショット。

  • 例 4.1: 応答の特定のノードの値が存在する場合に改ページが終了する

    REST API は、次の構造体の最後の応答を返します。

    {
        Data: [
            {key1: val991, key2: val992
            },
            {key1: val993, key2: val994
            }
        ],
                Complete: true
    }
    

    応答の特定のノードの値が存在する場合に改ページ調整を終了するには、終了条件ルールを "EndCondition:$.data": "Exist" に設定します。

    例 4.3 の終了条件の設定を示すスクリーンショット。

  • 例 4.1: 応答の特定のノードの値がユーザー定義の定数値の場合に改ページが終了する

    REST API は、次の構造体の応答を返します。

    {
        Data: [
            {key1: val1, key2: val2
            },
            {key1: val3, key2: val4
            }
        ],
                Complete: false
    }
    

    ......

    最後の応答は次の構造です。

    {
        Data: [
            {key1: val991, key2: val992
            },
            {key1: val993, key2: val994
            }
        ],
                Complete: true
    }
    

    応答の特定のノードの値がユーザー定義の定数値である場合に改ページ調整を終了するには、終了条件ルールを "EndCondition:$.Complete": "Const:true" に設定します。

    例 4.4 の終了条件の設定を示すスクリーンショット。

  • 例 4.5: 応答のヘッダー キーの値がユーザー定義の定数値に等しい場合に改ページが終了する

    REST API 応答のヘッダー キーは、次の構造に示されています。

    応答ヘッダー 1: header(Complete->0)
    ......
    最後の応答ヘッダー: header(Complete->1)

    応答のヘッダー キーの値がユーザー定義の定数値と同等である場合に改ページ調整を終了するには、終了条件ルールを "EndCondition:headers.Complete": "Const:1" に設定します。

    例 4.5 の終了条件の設定を示すスクリーンショット。

  • 例 4.6: 応答ヘッダーにキーが存在するときに、改ページ位置の自動修正が終了する

    REST API 応答のヘッダー キーは、次の構造に示されています。

    応答ヘッダー 1: header()
    ......
    最後の応答ヘッダー: header(CompleteTime->20220920)

    終了条件規則を "EndCondition:headers.CompleteTime": "Exist" として設定し、キーが応答ヘッダーに存在する場合に改ページを終了します。

    例 4.6 の終了条件の設定を示すスクリーンショット。

例 5: 範囲ルールが定義されていない場合に際限のない要求を回避するように終了条件を設定する

この例では、範囲ルールが使用されていない場合に複数の要求を送信する構成手順を示します。 終了条件では、際限のない要求を避けるため、4.1-4.6 の例を参照して設定できます。 REST API によって、次の構造で応答が返されます。この場合、次のページの URL は paging.next で表されます。

{
    "data": [
        {
            "created_time": "2017-12-12T14:12:20+0000",
            "name": "album1",
            "id": "1809938745705498_1809939942372045"
        },
        {
            "created_time": "2017-12-12T14:14:03+0000",
            "name": "album2",
            "id": "1809938745705498_1809941802371859"
        },
        {
            "created_time": "2017-12-12T14:14:11+0000",
            "name": "album3",
            "id": "1809938745705498_1809941879038518"
        }
    ],
    "paging": {
        "cursors": {
            "after": "MTAxNTExOTQ1MjAwNzI5NDE=",
            "before": "NDMyNzQyODI3OTQw"
        },
        "previous": "https://graph.facebook.com/me/albums?limit=25&before=NDMyNzQyODI3OTQw",
        "next": "https://graph.facebook.com/me/albums?limit=25&after=MTAxNTExOTQ1MjAwNzI5NDE="
    }
}
...

最後の応答は次のとおりです。

{
    "data": [],
    "paging": {
        "cursors": {
            "after": "MTAxNTExOTQ1MjAwNzI5NDE=",
            "before": "NDMyNzQyODI3OTQw"
        },
        "previous": "https://graph.facebook.com/me/albums?limit=25&before=NDMyNzQyODI3OTQw",
        "next": "Same with Last Request URL"
    }
}

手順 1: 改ページ規則"AbsoluteUrl": "$.paging.next" として設定します。

手順 2: 最後の応答の next が、最後の要求 URL と常に同じで、かつ空でない場合は、際限のない要求が送信されます。 終了条件は、際限のない要求を回避するために使用できます。 そのため、例 4.1-4.6 を参照して、終了条件規則を設定します。

例 6: 際限のない要求を回避するための最大要求数を設定する

次のスクリーンショットに示すように、 Maxrequestnumber を設定して際限のない要求を回避します。

例 6 の最大要求数の設定を示すスクリーンショット。

例 7: RFC 5988 の改ページ規則が既定でサポートされている

バックエンドは、ヘッダー内の RFC 5988 スタイルのリンクに基づいて次の URL を自動的に取得します。

RFC 5988 に準拠した http ヘッダーの例を示すスクリーンショット。

ヒント

この既定の改ページ規則を有効にしない場合は、supportRFC5988false に 設定するか、スクリプト内で削除するだけです。

例 7 の RFC 5988 の設定を無効にする方法を示すスクリーンショット。

例 8: データ フローのマッピングで改ページ位置の自動修正次を使用している場合、次の要求 URL は応答本文からのものである

この例では、次の要求 URL が応答本文からのものである場合に、データ フローのマッピングで改ページ規則と終了条件規則を設定する方法を示します。

応答スキーマは次のようになります。

例 8 の応答スキーマを示すスクリーンショット。

改ページ規則は、次のスクリーンショットのように設定する必要があります。

例 8 の改ページ規則を設定する方法を示すスクリーンショット。

既定では、ページ分割は、body.{@odata.nextLink}** が null 値または空になると停止します。

ただし、最後の応答本文にある @odata.nextLink の値が最後の要求 URL と同じ場合は、無限ループになります。 この状況を回避するには、終了条件の規則を定義します。

  • 最後の応答のの場合、終了条件規則は次のように設定できます。

    最後の応答が空の場合の終了条件規則の設定を示すスクリーンショット。

  • 応答ヘッダーの完全なキーの値が true と同等の場合は、改ページ位置の自動修正の終了を示し、次のように、終了条件規則を設定できます。

    応答ヘッダーの完了のキーの値が true で改ページ位置の自動修正が終了した場合の終了条件規則の設定を示すスクリーンショット。

例 9: データ フローのマッピングで改ページ位置の自動修正次を使用している場合、応答の形式が XML であり、次の要求 URL は応答本文からのものである

この例では、応答の形式が XML であり、次の要求 URL が応答本文からのものである場合に、マッピング データ フローで改ページ規則を設定する方法を示します。 次のスクリーンショットに示すように、最初の URL は https://<user>.dfs.core.windows.net/bugfix/test/movie_1.xml です

応答形式が XML で、次の要求 URL が応答本文からのものであることを示すスクリーンショット。

応答スキーマは次のようになります。

例 9 の応答スキーマを示すスクリーンショット。

改ページ規則の構文は例 8 と同じであり、次の例のように設定する必要があります。

例 9 の改ページ規則の設定を示すスクリーンショット。

JSON の応答をそのままエクスポートする

この REST コネクタを使用して REST API JSON の応答をそのままさまざまなファイル ベースのストアにエクスポートできます。 このようなスキーマに依存しないコピーを実現するには、データセットの "構造" ("スキーマ" とも呼ばれる) のセクションと、コピー アクティビティでのスキーマ マッピングをスキップします。

スキーマ マッピング

REST エンドポイントから表形式のシンクにデータをコピーするには、スキーマ マッピングを参照してください。

Azure Data Factory のコピー アクティビティによってソースおよびシンクとしてサポートされるデータ ストアの一覧については、「サポートされるデータ ストアと形式」を参照してください。