Azure Data Factory を使用した Azure SQL Database との間でのデータのコピー

Note

この記事は、Data Factory のバージョン 1 に適用されます。 現在のバージョンの Data Factory サービスを使用している場合は、V2 の Azure SQL Database コネクタに関するページを参照してください。

この記事では、Azure Data Factory のコピー アクティビティを使って、Azure SQL Database との間でデータを移動する方法について説明します。 この記事は、コピー アクティビティによるデータ移動の一般的な概要について説明している、データ移動アクティビティに関する記事に基づいています。

サポートされるシナリオ

Azure SQL Database から以下のデータ ストアにデータをコピーできます。

カテゴリ データ ストア
Azure Azure BLOB Storage
Azure Data Lake Storage Gen1
Azure Cosmos DB (SQL API)
Azure SQL Database
Azure Synapse Analytics
Azure Cognitive Search インデックス
Azure Table Storage
データベース SQL Server
Oracle
ファイル ファイル システム

以下のデータ ストアから Azure SQL Database にデータをコピーできます。

カテゴリ データ ストア
Azure Azure BLOB Storage
Azure Cosmos DB (SQL API)
Azure Data Lake Storage Gen1
Azure SQL Database
Azure Synapse Analytics
Azure Table Storage
データベース Amazon Redshift
DB2
MySQL
Oracle
PostgreSQL
SAP Business Warehouse
SAP HANA
SQL Server
Sybase
Teradata
NoSQL Cassandra
MongoDB
ファイル Amazon S3
ファイル システム
FTP
HDFS
SFTP
その他 汎用 HTTP
汎用 OData
汎用 ODBC
Salesforce
Web テーブル (HTML のテーブル)

サポートされている認証の種類

Azure SQL Database コネクタは基本認証をサポートしています。

作業の開始

さまざまなツール/API を使用して、Azure SQL Database との間でデータを移動するコピー アクティビティを含むパイプラインを作成できます。

パイプラインを作成する最も簡単な方法は、コピー ウィザードを使うことです。 「チュートリアル:コピー ウィザードを使用してパイプラインを作成する」を参照してください。データのコピー ウィザードを使用してパイプラインを作成する簡単なチュートリアルです。

また、次のツールを使用してパイプラインを作成することもできます。Visual StudioAzure PowerShellAzure Resource Manager テンプレート.NET APIREST API。 コピー アクティビティを含むパイプラインを作成するための詳細な手順については、コピー アクティビティのチュートリアルをご覧ください。

ツールと API のいずれを使用する場合も、次の手順を実行して、ソース データ ストアからシンク データ ストアにデータを移動するパイプラインを作成します。

  1. Data Factoryを作成します。 データ ファクトリには、1 つまたは複数のパイプラインを設定できます。
  2. リンクされたサービスを作成し、入力データ ストアと出力データ ストアをデータ ファクトリにリンクします。 たとえば、Azure Blob Storage から Azure SQL Database にデータをコピーする場合、リンクされたサービスを 2 つ作成して、Azure ストレージ アカウントと Azure SQL Database をデータ ファクトリにリンクします。 Azure SQL Database に固有のリンクされたサービスのプロパティについては、「リンクされたサービスのプロパティ」セクションをご覧ください。
  3. コピー操作用の入力データと出力データを表すデータセットを作成します。 最後の手順で説明されている例では、データセットを作成して入力データを含む BLOB コンテナーとフォルダーを指定します。 また、もう 1 つのデータセットを作成して、Blob Storage からコピーされたデータを保持する Azure SQL Database の SQL テーブルを指定します。 Azure Data Lake Store に固有のデータセットのプロパティについては、「データセットのプロパティ」セクションをご覧ください。
  4. 入力としてのデータセットと出力としてのデータセットを受け取るコピー アクティビティを含むパイプラインを作成します。 前に説明した例では、コピー アクティビティのソースとして BlobSource を、シンクとして SqlSink を使います。 同様に、Azure SQL Database から Azure Blob Storage にコピーする場合は、SqlSource と BlobSink をコピー アクティビティで使います。 Azure SQL Database に固有のコピー アクティビティのプロパティについては、「コピー アクティビティのプロパティ」セクションをご覧ください。 ソースまたはシンクとしてデータ ストアを使う方法について詳しくは、前のセクションのデータ ストアのリンクをクリックしてください。

ウィザードを使用すると、Data Factory エンティティ (リンクされたサービス、データセット、パイプライン) に関する JSON の定義が自動的に作成されます。 (.NET API を除く) ツールまたは API を使う場合は、JSON 形式でこれらの Data Factory エンティティを定義します。 Azure SQL Database との間でデータをコピーするときに使用する Data Factory エンティティの JSON 定義のサンプルについては、この記事の「JSON の使用例」を参照してください。

以下のセクションでは、Azure SQL Database に固有の Data Factory エンティティの定義に使用される JSON プロパティについて詳しく説明します。

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

Azure SQL のリンクされたサービスは、Azure SQL Database をデータ ファクトリにリンクします。 次の表は、Azure SQL のリンクされたサービスに固有の JSON 要素の説明をまとめたものです。

プロパティ 説明 必須
type type プロパティは、次のように設定する必要があります:AzureSqlDatabase はい
connectionString connectionString プロパティの Azure SQL データベース インスタンスに接続するために必要な情報を指定します。 基本認証だけがサポートされています。 はい

重要

サーバーへのアクセスを Azure サービスに許可するように Azure SQL Database ファイアウォール データベース サーバーを構成します。 また、Azure の外部から (たとえば、Data Factory ゲートウェイのあるオンプレミスのデータ ソースから) Azure SQL Database にデータをコピーする場合、Azure SQL Database にデータを送信するマシンに適切な IP アドレス範囲を設定します。

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

データセットを指定して Azure SQL Database の入力データまたは出力データを表すには、そのデータセットの type プロパティを AzureSqlTable に設定します。 また、データセットの linkedServiceName プロパティは、Azure SQL のリンクされたサービスの名前に設定します。

データセットの定義に利用できるセクションと&プロパティの完全な一覧については、データセットの作成に関する記事をご覧ください。 データセット JSON の構造、可用性、ポリシーなどのセクションは、データセットのすべての型 (Azure SQL、Azure BLOB、Azure テーブルなど) でほぼ同じです。

typeProperties セクションはデータセット型ごとに異なり、データ ストアのデータの場所などに関する情報を提供します。 AzureSqlTable 型のデータセットの typeProperties セクションには次のプロパティがあります。

プロパティ 説明 必須
tableName リンクされたサービスが参照する Azure SQL データベース インスタンスのテーブルまたはビューの名前です。 はい

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

アクティビティの定義に利用できるセクションと&プロパティの完全な一覧については、パイプラインの作成に関する記事を参照してください。 名前、説明、入力テーブル、出力テーブル、ポリシーなどのプロパティは、あらゆる種類のアクティビティで使用できます。

Note

コピー アクティビティは入力を 1 つだけ受け取り、出力を 1 つだけ生成します。

一方、アクティビティの typeProperties セクションで使用できるプロパティは、各アクティビティの種類によって異なります。 コピー アクティビティの場合、ソースとシンクの種類によって異なります。

Azure SQL Database からデータを移動する場合は、コピー アクティビティのソースの種類を SqlSource に設定します。 同様に、Azure SQL Database にデータを移動する場合は、コピー アクティビティのシンクの種類を SqlSink に設定します。 このセクションでは、SqlSource と SqlSink でサポートされるプロパティの一覧を示します。

SqlSource

コピー アクティビティで、source の種類が SqlSource である場合は、typeProperties セクションで次のプロパティを使用できます。

プロパティ 説明 使用できる値 必須
sqlReaderQuery カスタム クエリを使用してデータを読み取ります。 SQL クエリ文字列。 例: select * from MyTable. いいえ
sqlReaderStoredProcedureName ソース テーブルからデータを読み取るストアド プロシージャの名前。 ストアド プロシージャの名前。 最後の SQL ステートメントはストアド プロシージャの SELECT ステートメントにする必要があります。 いいえ
storedProcedureParameters ストアド プロシージャのパラメーター。 名前と値のペア。 パラメーターの名前とその大文字と小文字は、ストアド プロシージャのパラメーターの名前とその大文字小文字と一致する必要があります。 いいえ

SqlSource に sqlReaderQuery が指定されている場合、コピー アクティビティでは、データを取得するために Azure SQL Database ソースに対してこのクエリを実行します。 または、sqlReaderStoredProcedureNamestoredProcedureParameters を指定して、ストアド プロシージャを指定することができます (ストアド プロシージャでパラメーターを使用する場合)。

sqlReaderQuery や sqlReaderStoredProcedureName を指定しない場合は、Azure SQL Database に対して実行するクエリを作成する (select column1, column2 from mytable) ために、データセット JSON の構造セクションで定義された列が使用されます。 データセット定義に構造がない場合は、すべての列がテーブルから選択されます。

注意

sqlReaderStoredProcedureName を使用する場合でも、データセット JSON の tableName プロパティの値を指定する必要があります。 ただし、このテーブルに対して実行される検証はありません。

SqlSource の例

"source": {
    "type": "SqlSource",
    "sqlReaderStoredProcedureName": "CopyTestSrcStoredProcedureWithParameters",
    "storedProcedureParameters": {
        "stringData": { "value": "str3" },
        "identifier": { "value": "$$Text.Format('{0:yyyy}', SliceStart)", "type": "Int"}
    }
}

ストアド プロシージャの定義:

CREATE PROCEDURE CopyTestSrcStoredProcedureWithParameters
(
    @stringData varchar(20),
    @identifier int
)
AS
SET NOCOUNT ON;
BEGIN
    select *
    from dbo.UnitTestSrcTable
    where dbo.UnitTestSrcTable.stringData != stringData
    and dbo.UnitTestSrcTable.identifier != identifier
END
GO

パイプライン

SqlSink では次のプロパティがサポートされます。

プロパティ 説明 使用できる値 必須
writeBatchTimeout タイムアウトする前に一括挿入操作の完了を待つ時間です。 TimeSpan

例:"00:30:00" (30 分)。
いいえ
writeBatchSize バッファー サイズが writeBatchSize に達したときに SQL テーブルにデータを挿入します。 整数 (行数) いいえ (既定値: 10000)
sqlWriterCleanupScript 特定のスライスのデータを消去するコピー アクティビティのクエリを指定します。 詳細については、「反復可能なコピー」を参照してください。 クエリ ステートメント。 いいえ
sliceIdentifierColumnName 自動生成スライス ID を入力するためのコピー アクティビティの列名を指定します。再実行時、特定のスライスのデータを消去するときに使用されます。 詳細については、「反復可能なコピー」を参照してください。 バイナリ (32) のデータ型の列の列名。 いいえ
sqlWriterStoredProcedureName ソース データをターゲット テーブルに適用する方法、たとえば、独自のビジネス ロジックを使用してアップサートまたは変換を実行する方法を定義するストアド プロシージャの名前です。

このストアド プロシージャはバッチごとに呼び出されることに注意してください。 1 回だけ実行され、ソース データとは関係がない操作 (削除/切り詰めなど) を実行する場合は、sqlWriterCleanupScript プロパティを使用します。
ストアド プロシージャの名前。 いいえ
storedProcedureParameters ストアド プロシージャのパラメーター。 名前と値のペア。 パラメーターの名前とその大文字と小文字は、ストアド プロシージャのパラメーターの名前とその大文字小文字と一致する必要があります。 いいえ
sqlWriterTableType ストアド プロシージャで使用するテーブル型の名前を指定します。 コピー アクティビティでは、このテーブル型の一時テーブルでデータを移動できます。 その後、ストアド プロシージャのコードにより、コピーされたデータを既存のデータと結合できます。 テーブルの種類の名前。 いいえ

SqlSink の例

"sink": {
    "type": "SqlSink",
    "writeBatchSize": 1000000,
    "writeBatchTimeout": "00:05:00",
    "sqlWriterStoredProcedureName": "CopyTestStoredProcedureWithParameters",
    "sqlWriterTableType": "CopyTestTableType",
    "storedProcedureParameters": {
        "identifier": { "value": "1", "type": "Int" },
        "stringData": { "value": "str1" },
        "decimalData": { "value": "1", "type": "Decimal" }
    }
}

SQL Database との間でのデータのコピーに関する JSON の例

次の例は、Visual Studio または Azure PowerShell を使用してパイプラインを作成する際に使用できるサンプルの JSON 定義です。 これらの例は、Azure SQL Database と Azure BLOB ストレージの間でデータをコピーする方法を示しています。 ただし、Azure Data Factory のコピー アクティビティを使用して、 こちら に記載されているいずれかのシンクに、任意のソースからデータを 直接 コピーすることができます。

例:Azure SQL Database から Azure BLOB にデータをコピーする

このサンプルでは、次の Data Factory のエンティティを定義します。

  1. AzureSqlDatabase型のリンクされたサービス。
  2. AzureStorage型のリンクされたサービス。
  3. AzureSqlTable 型の入力データセット
  4. Azure BLOB 型の出力データセット
  5. SqlSourceBlobSink を使用するコピー アクティビティを含むパイプライン

このサンプルは、Azure SQL Database のテーブルから BLOB に時系列データ (時間単位、日単位など) を 1 時間おきにコピーします。 これらのサンプルで使用される JSON プロパティの説明はサンプルに続くセクションにあります。

Azure SQL Database のリンクされたサービス:

{
  "name": "AzureSqlLinkedService",
  "properties": {
    "type": "AzureSqlDatabase",
    "typeProperties": {
      "connectionString": "Server=tcp:<servername>.database.windows.net,1433;Database=<databasename>;User ID=<username>@<servername>;Password=<password>;Trusted_Connection=False;Encrypt=True;Connection Timeout=30"
    }
  }
}

このリンクされたサービスでサポートされているプロパティの一覧については、「Azure SQL のリンクされたサービス」を参照してください。

Azure BLOB ストレージのリンクされたサービス:

{
  "name": "StorageLinkedService",
  "properties": {
    "type": "AzureStorage",
    "typeProperties": {
      "connectionString": "DefaultEndpointsProtocol=https;AccountName=<accountname>;AccountKey=<accountkey>"
    }
  }
}

このリンクされたサービスでサポートされているプロパティの一覧については、Azure BLOB に関する記事を参照してください。

Azure SQL の入力データセット:

このサンプルでは、Azure SQL で「MyTable」という名前のテーブルを作成し、時系列データ用に「timestampcolumn」という名前の列が含まれているものと想定しています。

"external" を "true" に設定すると、データセットがデータ ファクトリの外部にあり、データ ファクトリのアクティビティによって生成されたものではないことが Azure Data Factory サービスに通知されます。

{
  "name": "AzureSqlInput",
  "properties": {
    "type": "AzureSqlTable",
    "linkedServiceName": "AzureSqlLinkedService",
    "typeProperties": {
      "tableName": "MyTable"
    },
    "external": true,
    "availability": {
      "frequency": "Hour",
      "interval": 1
    },
    "policy": {
      "externalData": {
        "retryInterval": "00:01:00",
        "retryTimeout": "00:10:00",
        "maximumRetry": 3
      }
    }
  }
}

このデータセット型でサポートされているプロパティの一覧については、「Azure SQL データセットの type プロパティ」セクションを参照してください。

Azure BLOB の出力データセット:

データは新しい BLOB に 1 時間おきに書き込まれます (frequency: hour、interval: 1)。 BLOB のフォルダー パスは、処理中のスライスの開始時間に基づき、動的に評価されます。 フォルダー パスは開始時間の年、月、日、時刻の部分を使用します。

{
  "name": "AzureBlobOutput",
  "properties": {
    "type": "AzureBlob",
    "linkedServiceName": "StorageLinkedService",
    "typeProperties": {
      "folderPath": "mycontainer/myfolder/yearno={Year}/monthno={Month}/dayno={Day}/hourno={Hour}/",
      "partitionedBy": [
        {
          "name": "Year",
          "value": {
            "type": "DateTime",
            "date": "SliceStart",
            "format": "yyyy"
          }
        },
        {
          "name": "Month",
          "value": {
            "type": "DateTime",
            "date": "SliceStart",
            "format": "MM"
          }
        },
        {
          "name": "Day",
          "value": {
            "type": "DateTime",
            "date": "SliceStart",
            "format": "dd"
          }
        },
        {
          "name": "Hour",
          "value": {
            "type": "DateTime",
            "date": "SliceStart",
            "format": "HH"
          }
        }
      ],
      "format": {
        "type": "TextFormat",
        "columnDelimiter": "\t",
        "rowDelimiter": "\n"
      }
    },
    "availability": {
      "frequency": "Hour",
      "interval": 1
    }
  }
}

このデータセット型でサポートされているプロパティの一覧については、「 Azure BLOB データセットの type プロパティ 」を参照してください。

SQL ソースおよび BLOB シンクを使用するパイプラインでのコピー アクティビティ:

パイプラインには、入力データセットと出力データセットを使用するように構成され、1 時間おきに実行するようにスケジュールされているコピー アクティビティが含まれています。 パイプライン JSON 定義で、source 型が SqlSource に設定され、sink 型が BlobSink に設定されています。 SqlReaderQuery プロパティに指定されている SQL クエリは過去のデータを選択してコピーします。

{
  "name":"SamplePipeline",
  "properties":{
    "start":"2014-06-01T18:00:00",
    "end":"2014-06-01T19:00:00",
    "description":"pipeline for copy activity",
    "activities":[
      {
        "name": "AzureSQLtoBlob",
        "description": "copy activity",
        "type": "Copy",
        "inputs": [
          {
            "name": "AzureSQLInput"
          }
        ],
        "outputs": [
          {
            "name": "AzureBlobOutput"
          }
        ],
        "typeProperties": {
          "source": {
            "type": "SqlSource",
            "SqlReaderQuery": "$$Text.Format('select * from MyTable where timestampcolumn >= \\'{0:yyyy-MM-dd HH:mm}\\' AND timestampcolumn < \\'{1:yyyy-MM-dd HH:mm}\\'', WindowStart, WindowEnd)"
          },
          "sink": {
            "type": "BlobSink"
          }
        },
        "scheduler": {
          "frequency": "Hour",
          "interval": 1
        },
        "policy": {
          "concurrency": 1,
          "executionPriorityOrder": "OldestFirst",
          "retry": 0,
          "timeout": "01:00:00"
        }
      }
    ]
  }
}

この例では、SqlSource に sqlReaderQuery が指定されています。 コピー アクティビティでは、データを取得するために Azure SQL Database ソースに対してこのクエリを実行します。 または、sqlReaderStoredProcedureNamestoredProcedureParameters を指定して、ストアド プロシージャを指定することができます (ストアド プロシージャでパラメーターを使用する場合)。

sqlReaderQuery や sqlReaderStoredProcedureName を指定しない場合は、Azure SQL Database に対して実行するクエリを作成するために、データセット JSON の構造セクションで定義された列が使用されます。 (例: select column1, column2 from mytable)。 データセット定義に構造がない場合は、すべての列がテーブルから選択されます。

SqlSource と BlobSink でサポートされるプロパティの一覧については、「SqlSource」および BlobSink に関する記述を参照してください。

例:Azure BLOB から Azure SQL Database にデータをコピーする

このサンプルでは、次の Data Factory のエンティティを定義します。

  1. AzureSqlDatabase型のリンクされたサービス。
  2. AzureStorage型のリンクされたサービス。
  3. AzureBlob 型の入力データセット
  4. AzureSqlTable 型の出力データセット
  5. BlobSourceSqlSink を使用するコピー アクティビティのパイプライン

このサンプルは、Azure SQL Database のテーブルから Azure BLOB に時系列データ (時間単位、日単位など) を 1 時間おきにコピーします。 これらのサンプルで使用される JSON プロパティの説明はサンプルに続くセクションにあります。

Azure SQL のリンクされたサービス:

{
  "name": "AzureSqlLinkedService",
  "properties": {
    "type": "AzureSqlDatabase",
    "typeProperties": {
      "connectionString": "Server=tcp:<servername>.database.windows.net,1433;Database=<databasename>;User ID=<username>@<servername>;Password=<password>;Trusted_Connection=False;Encrypt=True;Connection Timeout=30"
    }
  }
}

このリンクされたサービスでサポートされているプロパティの一覧については、「Azure SQL のリンクされたサービス」を参照してください。

Azure BLOB ストレージのリンクされたサービス:

{
  "name": "StorageLinkedService",
  "properties": {
    "type": "AzureStorage",
    "typeProperties": {
      "connectionString": "DefaultEndpointsProtocol=https;AccountName=<accountname>;AccountKey=<accountkey>"
    }
  }
}

このリンクされたサービスでサポートされているプロパティの一覧については、Azure BLOB に関する記事を参照してください。

Azure BLOB の入力データセット:

データは新しい BLOB から 1 時間おきに取得されます (頻度: 時間、間隔:1)。 BLOB のフォルダー パスとファイル名は、処理中のスライスの開始時間に基づき、動的に評価されます。 フォルダー パスでは開始時間の年、月、日の部分を使用し、ファイル名では開始時間の時刻部分を使用します。 "external": "true" 設定では Data Factory サービスにこのテーブルが Data Factory の外部にあり、Data Factory のアクティビティでは生成されないことを通知します。

{
  "name": "AzureBlobInput",
  "properties": {
    "type": "AzureBlob",
    "linkedServiceName": "StorageLinkedService",
    "typeProperties": {
      "folderPath": "mycontainer/myfolder/yearno={Year}/monthno={Month}/dayno={Day}/",
      "fileName": "{Hour}.csv",
      "partitionedBy": [
        {
          "name": "Year",
          "value": {
            "type": "DateTime",
            "date": "SliceStart",
            "format": "yyyy"
          }
        },
        {
          "name": "Month",
          "value": {
            "type": "DateTime",
            "date": "SliceStart",
            "format": "MM"
          }
        },
        {
          "name": "Day",
          "value": {
            "type": "DateTime",
            "date": "SliceStart",
            "format": "dd"
          }
        },
        {
          "name": "Hour",
          "value": {
            "type": "DateTime",
            "date": "SliceStart",
            "format": "HH"
          }
        }
      ],
      "format": {
        "type": "TextFormat",
        "columnDelimiter": ",",
        "rowDelimiter": "\n"
      }
    },
    "external": true,
    "availability": {
      "frequency": "Hour",
      "interval": 1
    },
    "policy": {
      "externalData": {
        "retryInterval": "00:01:00",
        "retryTimeout": "00:10:00",
        "maximumRetry": 3
      }
    }
  }
}

このデータセット型でサポートされているプロパティの一覧については、「 Azure BLOB データセットの type プロパティ 」を参照してください。

Azure SQL Database の出力データセット:

このサンプルでは Azure SQL の「MyTable」というテーブルにデータがコピーされます。 BLOB CSV ファイルに含めることが予想される列の数と同じ列数で Azure SQL にテーブルを作成します。 新しい行は 1 時間ごとにテーブルに追加されます。

{
  "name": "AzureSqlOutput",
  "properties": {
    "type": "AzureSqlTable",
    "linkedServiceName": "AzureSqlLinkedService",
    "typeProperties": {
      "tableName": "MyOutputTable"
    },
    "availability": {
      "frequency": "Hour",
      "interval": 1
    }
  }
}

このデータセット型でサポートされているプロパティの一覧については、「Azure SQL データセットの type プロパティ」セクションを参照してください。

BLOB ソースおよび SQL シンクを使用するパイプラインでのコピー アクティビティ:

パイプラインには、入力データセットと出力データセットを使用するように構成され、1 時間おきに実行するようにスケジュールされているコピー アクティビティが含まれています。 パイプラインの JSON 定義で、source 型が BlobSource に設定され、sink 型が SqlSink に設定されています。

{
  "name":"SamplePipeline",
  "properties":{
    "start":"2014-06-01T18:00:00",
    "end":"2014-06-01T19:00:00",
    "description":"pipeline with copy activity",
    "activities":[
      {
        "name": "AzureBlobtoSQL",
        "description": "Copy Activity",
        "type": "Copy",
        "inputs": [
          {
            "name": "AzureBlobInput"
          }
        ],
        "outputs": [
          {
            "name": "AzureSqlOutput"
          }
        ],
        "typeProperties": {
          "source": {
            "type": "BlobSource",
            "blobColumnSeparators": ","
          },
          "sink": {
            "type": "SqlSink"
          }
        },
        "scheduler": {
          "frequency": "Hour",
          "interval": 1
        },
        "policy": {
          "concurrency": 1,
          "executionPriorityOrder": "OldestFirst",
          "retry": 0,
          "timeout": "01:00:00"
        }
      }
    ]
  }
}

SqlSink と BlobSource でサポートされるプロパティの一覧については、「Sql Sink」および BlobSource に関する記述を参照してください。

ターゲット データベースの ID 列

このセクションでは、ID 列がないソース テーブルから ID 列がある対象テーブルにデータをコピーする例を示します。

ソース テーブル:

create table dbo.SourceTbl
(
    name varchar(100),
    age int
)

対象テーブル:

create table dbo.TargetTbl
(
    identifier int identity(1,1),
    name varchar(100),
    age int
)

ターゲット テーブルには ID 列があることに注意してください。

ソース データセット JSON の定義

{
    "name": "SampleSource",
    "properties": {
        "type": " SqlServerTable",
        "linkedServiceName": "TestIdentitySQL",
        "typeProperties": {
            "tableName": "SourceTbl"
        },
        "availability": {
            "frequency": "Hour",
            "interval": 1
        },
        "external": true,
        "policy": {}
    }
}

対象データセット JSON の定義

{
    "name": "SampleTarget",
    "properties": {
        "structure": [
            { "name": "name" },
            { "name": "age" }
        ],
        "type": "AzureSqlTable",
        "linkedServiceName": "TestIdentitySQLSource",
        "typeProperties": {
            "tableName": "TargetTbl"
        },
        "availability": {
            "frequency": "Hour",
            "interval": 1
        },
        "external": false,
        "policy": {}
    }
}

ソースとターゲット テーブルには異なるスキーマがあることに注意してください (ターゲットには ID を持つ追加の列があります)。 このシナリオでは、ターゲット データセット定義で structure プロパティを指定する必要があります。ここでは、ID 列は含みません。

SQL シンクからのストアド プロシージャの呼び出し

パイプラインのコピー アクティビティで SQL シンクからストアド プロシージャを呼び出す例については、コピー アクティビティでの SQL シンクのストアド プロシージャの呼び出しに関する記事をご覧ください。

Azure SQL Database の型のマッピング

データ移動アクティビティ に関する記事のとおり、コピー アクティビティは次の 2 段階のアプローチで型を source から sink に自動的に変換します。

  1. ネイティブの source 型から .NET 型に変換する
  2. .NET 型からネイティブの sink 型に変換する

Azure SQL Database との間でデータを移動するとき、SQL 型から .NET 型へのマッピング (およびその逆) に次のマッピングが使用されます。 マッピングは ADO.NET の SQL Server データ型マッピングと同じです。

SQL Server Databases エンジンの型 .NET Framework 型
bigint Int64
binary Byte[]
bit Boolean
char String, Char[]
date DateTime
Datetime DateTime
datetime2 DateTime
Datetimeoffset DateTimeOffset
Decimal Decimal (10 進数型)
FILESTREAM attribute (varbinary(max)) Byte[]
Float Double
image Byte[]
INT Int32
money Decimal (10 進数型)
nchar String, Char[]
ntext String, Char[]
numeric Decimal (10 進数型)
nvarchar String, Char[]
real Single
rowversion Byte[]
smalldatetime DateTime
smallint Int16
smallmoney Decimal (10 進数型)
sql_variant Object *
text String, Char[]
time TimeSpan
timestamp Byte[]
tinyint Byte
UNIQUEIDENTIFIER Guid
varbinary Byte[]
varchar String, Char[]
xml xml

ソース列からシンク列へのマップ

ソース データセット列のシンク データセット列へのマッピングの詳細については、Azure Data Factory のデータセット列のマッピングに関するページをご覧ください。

反復可能なコピー

SQL Server Database にデータをコピーすると、既定では、コピー アクティビティによりデータがシンク テーブルに付加されます。 代わりに UPSERT を実行するには、「SqlSink への反復可能な書き込み」を参照してください。

リレーショナル データ ストアからデータをコピーする場合は、意図しない結果を避けるため、再現性に注意する必要があります。 Azure Data Factory では、スライスを手動で再実行できます。 障害が発生したときにスライスを再実行できるように、データセットの再試行ポリシーを構成することもできます。 いずれかの方法でスライスが再実行された際は、何度スライスが実行されても同じデータが読み込まれることを確認する必要があります。 リレーショナル ソースからの反復可能読み取りに関するページをご覧ください。

パフォーマンスとチューニング

Azure Data Factory でのデータ移動 (コピー アクティビティ) のパフォーマンスに影響する主な要因と、パフォーマンスを最適化するための各種方法については、「コピー アクティビティのパフォーマンスと&チューニングに関するガイド」を参照してください。