Copy アクティビティで Azure SQL Database を構成する
この記事では、データ パイプラインでのコピー アクティビティを使用して、Azure SQL データベース間でデータをコピーする方法について説明します。
サポートされている構成
Copy アクティビティの下の各タブの構成については、それぞれ次のセクションを参照してください。
全般
[全般設定] タブを構成するには、全般設定のガイダンスを参照してください。
ソース
コピー アクティビティの [ソース] タブの Azure SQL Database では、次のプロパティがサポートされています。
次のプロパティは必須です。
- [データ ストアの種類]: [外部] を選択します。
- [接続]: 接続リストから Azure SQL Database の接続を選択します。 接続が存在しない場合は、[新規] を選択して新しい Azure SQL Database 接続を作成します。
- [接続の種類]: [Azure SQL Database] を選びます。
- [テーブル]: ドロップダウン リストからデータベースのテーブルを選択します。 または、[編集] をチェックして、テーブル名を手動で入力します。
- [データのプレビュー]: [データのプレビュー] を選択して、テーブル内のデータをプレビューします。
[詳細設定] では、次のフィールドを指定できます。
[クエリを使用する]: [テーブル]、[クエリ]、または [ストアド プロシージャ] を選択できます。 次の一覧で、各設定の構成について説明します。
テーブル: このボタンを選択した場合、上の [テーブル] で指定した表からデータを読み取ります。
[クエリ]: カスタムの SQL クエリを使用してデータを読み取ります。 たとえば
select * from MyTable
です。 または、鉛筆アイコンを選択してコード エディターで編集します。[ストアド プロシージャ]: ストアド プロシージャを使用してソース テーブルからデータを読み取ります。 最後の SQL ステートメントはストアド プロシージャの SELECT ステートメントにする必要があります。
[クエリ タイムアウト (分)]: クエリ コマンド実行時のタイムアウト時間を指定します。既定値は 120 分です。 このプロパティにパラメーターを設定する場合は、「02:00:00」(120 分) などの期間の値が使用できます。
[分離レベル]: SQL ソースのトランザクション ロック動作を指定します。 使用できる値は、None、ReadCommitted、ReadUncommitted、RepeatableRead、Serializable、Snapshot です。 指定しない場合は、[None] の分離レベルが使用されます。 詳細については、「IsolationLevel 列挙型」 を参照してください。
[パーティション オプション]: Azure SQL データベースからのデータの読み込みに使用するデータ パーティション分割オプションを指定します。 使用できる値は、なし (既定値)、テーブルの物理パーティション、および動的範囲です。 パーティション オプションが有効になっている場合 (つまり、なしではない場合)、Azure SQL データベースから同時にデータを読み込む並列処理の次数は、コピー アクティビティの並列コピー設定によって制御されます。
[なし]: パーティションを使用しないようにするには、この設定を選択します。
[テーブルの物理パーティション]: 物理パーティションを使うとき、パーティションの列とメカニズムは、物理テーブル定義に基づいて自動的に決定されます。
[動的範囲]: 並列を有効にしたクエリを使うときは、範囲パーティション パラメーター (
?DfDynamicRangePartitionCondition
) が必要です。 サンプル クエリ:SELECT * FROM <TableName> WHERE ?DfDynamicRangePartitionCondition
。- [パーティション列名]: 並列コピーの範囲パーティション分割で使用される整数型または日付/日時型 (
int
、smallint
、bigint
、date
、smalldatetime
、datetime
、datetime2
またはdatetimeoffset
) のソース列の名前を指定します。 指定しない場合、テーブルのインデックスまたは主キーが自動検出され、パーティション列として使用されます。 - [パーティションの上限]: パーティション範囲の分割に使用するパーティション列の最大値を指定します。 この値は、テーブル内の行のフィルター処理用ではなく、パーティションのストライドを決定するために使用されます。 テーブルまたはクエリ結果に含まれるすべての行がパーティション分割され、コピーされます。
- [パーティションの下限]: パーティション範囲の分割に使用するパーティション列の最小値を指定します。 この値は、テーブル内の行のフィルター処理用ではなく、パーティションのストライドを決定するために使用されます。 テーブルまたはクエリ結果に含まれるすべての行がパーティション分割され、コピーされます。
- [パーティション列名]: 並列コピーの範囲パーティション分割で使用される整数型または日付/日時型 (
[追加の列]: ソース ファイルの相対パスまたは静的な値を格納するため、データ列をさらに追加します。 後者では式がサポートされています。 詳細については、「コピー中に列を追加する」を参照してください。
宛先
コピー アクティビティの [コピー先] タブの Azure SQL データベースでは、次のプロパティがサポートされています。
次のプロパティは必須です。
- [データ ストアの種類]: [外部] を選択します。
- [接続]: 接続リストから Azure SQL Database の接続を選択します。 接続が存在しない場合は、[新規] を選択して新しい Azure SQL Database 接続を作成します。
- [接続の種類]: [Azure SQL Database] を選びます。
- [テーブル]: ドロップダウン リストからデータベースのテーブルを選択します。 または、[編集] をチェックして、テーブル名を手動で入力します。
- [データのプレビュー]: [データのプレビュー] を選択して、テーブル内のデータをプレビューします。
[詳細設定] では、次のフィールドを指定できます。
[書き込み動作]: コピー元がファイルベース データ ストアのファイルである場合に書き込み動作を定義します。 [挿入]、[アップサート]、または [ストアド プロシージャ] を選択できます。
[挿入]: ソース データに挿入がある場合は、このオプションを選択します。
[アップサート]: ソース データに挿入と更新の両方がある場合は、このオプションを選択します。
[TempDB を使用]: アップサートの中間テーブルとしてグローバル一時テーブルと物理テーブルのどちらを使用するかを指定します。 既定では、サービスは中間テーブルとしてグローバル一時テーブルを使用し、このチェック ボックスがオンになっています。
[ユーザー DB スキーマの選択]: [TempDB を使用する] チェック ボックスがオンになっていない場合は、物理テーブルを使用する場合に中間テーブルを作成するための中間スキーマを指定します。
Note
テーブルを作成および削除するための権限を持っている必要があります。 既定では、中間テーブルは コピー先テーブルと同じスキーマを共有します。
[キー列]: 行を一意に識別するための列名を指定します。 1 つのキーまたは一連のキーのいずれかを使用できます。 指定しない場合は、主キーが使用されます。
[ストアド プロシージャ]: ターゲット テーブルにソース データを適用する方法を定義しているストアド プロシージャを使用します。 このストアド プロシージャはバッチごとに呼び出されます。
[一括挿入テーブル ロック]: [はい] または [いいえ] を選択します。 この設定を使用すると、複数のクライアントからインデックスがないテーブルに対して一括挿入操作を行う時のコピー パフォーマンスが向上します。 詳細については、「BULK INSERT (Transact-SQL)」を参照してください
[テーブル オプション]: ソース スキーマに基づくテーブルが存在しない場合に、コピー先テーブルを自動的に作成するかどうかを指定します。 [なし] または [テーブルの自動作成] を選択します。 コピー先でストアド プロシージャが指定されている場合、テーブルの自動作成はサポートされません。
[事前コピー スクリプト]: 各実行でコピー先テーブルにデータを書き込む前に実行するコピー アクティビティのスクリプトを指定します。 このプロパティを使用して、事前に読み込まれたデータをクリーンアップできます。
[書き込みバッチ タイムアウト]: タイムアウトになるまでに一括挿入操作の完了を待つ時間です。許容される値は期間です。 既定値は「00:30:00」(30 分) です。
[書き込みバッチ サイズ]: SQL テーブルに挿入するバッチあたりの行数を指定します。 使用可能な値は integer (行数) です。 既定では行のサイズに基づいて、サービスにより適切なバッチ サイズが動的に決定されます。
[最大コンカレント接続数]: アクティビティの実行中にデータ ストアに対して確立できるコンカレント接続数の上限を指定します。 コンカレント接続を制限する場合にのみ、値を指定します。
[パフォーマンス メトリック分析を無効にする]: この設定は、コピー パフォーマンスの最適化と推奨事項のために、DTU、DWU、RU などのメトリックを収集するために使用します。 この動作に問題がある場合は、このチェック ボックスをオンにします。
マッピング
[マッピング] タブの構成で、コピー先として自動作成テーブルで Azure SQL データベースを適用しない場合は、[マッピング] に移動します。
[マッピング] の構成を除き、コピー先として自動作成テーブルで Azure SQL データベースを適用する場合は、コピー先列の型を編集できます。 [スキーマのインポート] を選択した後、コピー先で列の種類を指定できます。
たとえば、ソースの ID 列の型は int ですが、コピー先列にマッピングするときには float 型に変更できます。
設定
[設定] タブの構成については、「[設定] タブで他の設定を構成する」を参照してください。
Azure SQL データベースからの並列コピー
Azure SQL Database コネクタでは、コピー アクティビティの際に、データを並列でコピーするための組み込みのデータ パーティション分割が提供されます。 データ パーティション分割オプションは、コピー アクティビティの [ソース] タブにあります。
パーティション分割されるコピーを有効にすると、コピー アクティビティによって Azure SQL Database ソースに対する並列クエリが実行され、パーティションごとにデータが読み込まれます。 並列処理の次数は、Copy アクティビティの設定タブの [コピーの並列処理] によって制御されます。たとえば、並列処理の次数を 4 に設定した場合、指定したパーティション オプションと設定に基づいて 4 つのクエリが同時に生成され、実行されます。各クエリでは、Azure SQL データベースからデータの一部を取得します。
Azure SQL Database から大量のデータを読み込む場合は特に、データ パーティション分割を行う並列コピーを有効にすることが推奨されます。 さまざまなシナリオの推奨構成を以下に示します。 ファイルベースのデータ ストアにデータをコピーする場合は、複数のファイルとしてフォルダーに書き込む (フォルダー名のみを指定する) ことをお勧めします。この場合、1 つのファイルに書き込むよりもパフォーマンスが優れています。
シナリオ | 推奨設定 |
---|---|
物理パーティションに分割された大きなテーブル全体から読み込む。 | パーティション オプション: テーブルの物理パーティション。 実行中に、サービスによって物理パーティションが自動的に検出され、パーティションごとにデータがコピーされます。 テーブルに物理パーティションがあるかどうかを確認するには、こちらのクエリを参照してください。 |
物理パーティションがなく、データ パーティション分割用の整数または日時の列がある大きなテーブル全体から読み込む。 | パーティション オプション: 動的範囲パーティション。 パーティション列 (省略可能):データのパーティション分割に使用される列を指定します。 指定されていない場合は、インデックスまたは主キー列が使用されます。 パーティションの上限とパーティションの下限 (省略可能):パーティションのストライドを決定する場合に指定します。 これは、テーブル内の行のフィルター処理用ではなく、テーブル内のすべての行がパーティション分割されてコピーされます。 指定されていない場合は、Copy アクティビティによって値が自動検出されます。 たとえば、パーティション列「ID」の値の範囲が 1 ~ 100 で、下限を 20 に、上限を 80 に設定し、並列コピーを 4 にした場合、サービスによって 4 つのパーティションでデータが取得されます。ID の範囲は、それぞれ、20 以下、21 ~ 50、51 ~ 80、81 以上となります。 |
物理パーティションがなく、データ パーティション分割用の整数列または日付/日時列がある大量のデータを、カスタム クエリを使用して読み込む。 | パーティション オプション: 動的範囲パーティション。 クエリ: SELECT * FROM <TableName> WHERE ?DfDynamicRangePartitionCondition AND <your_additional_where_clause> パーティション列: データのパーティション分割に使用される列を指定します。 パーティションの上限とパーティションの下限 (省略可能):パーティションのストライドを決定する場合に指定します。 これは、テーブル内の行のフィルター処理用ではなく、クエリ結果のすべての行がパーティション分割されてコピーされます。 指定されていない場合は、Copy アクティビティによって値が自動検出されます。 たとえば、パーティション列「ID」の値の範囲が 1 ~ 100 で、下限を 20 に、上限を 80 に設定し、並列コピーを 4 にした場合、サービスによって 4 つのパーティションでデータが取得されます。ID の範囲は、それぞれ、20 以下、21 ~ 50、51 ~ 80、81 以上となります。 さまざまなシナリオのサンプル クエリを次に示します。 • テーブル全体に対してクエリを実行する: SELECT * FROM <TableName> WHERE ?DfDynamicRangePartitionCondition • 列の選択と追加の where 句フィルターが含まれるテーブルからのクエリ: SELECT <column_list> FROM <TableName> WHERE ?DfDynamicRangePartitionCondition AND <your_additional_where_clause> • サブクエリを使用したクエリ: SELECT <column_list> FROM (<your_sub_query>) AS T WHERE ?DfDynamicRangePartitionCondition AND <your_additional_where_clause> • サブクエリにパーティションがあるクエリ: SELECT <column_list> FROM (SELECT <your_sub_query_column_list> FROM <TableName> WHERE ?DfDynamicRangePartitionCondition) AS T |
パーティション オプションを使用してデータを読み込む場合のベスト プラクティス:
- データ スキューを回避するため、パーティション列 (主キーや一意キーなど) には特徴のある列を選択します。
- テーブルに組み込みパーティションがある場合は、パフォーマンスを向上させるためにパーティション オプションとして "テーブルの物理パーティション" を使用します。
物理パーティションを確認するためのサンプル クエリ
SELECT DISTINCT s.name AS SchemaName, t.name AS TableName, pf.name AS PartitionFunctionName, c.name AS ColumnName, iif(pf.name is null, 'no', 'yes') AS HasPartition
FROM sys.tables AS t
LEFT JOIN sys.objects AS o ON t.object_id = o.object_id
LEFT JOIN sys.schemas AS s ON o.schema_id = s.schema_id
LEFT JOIN sys.indexes AS i ON t.object_id = i.object_id
LEFT JOIN sys.index_columns AS ic ON ic.partition_ordinal > 0 AND ic.index_id = i.index_id AND ic.object_id = t.object_id
LEFT JOIN sys.columns AS c ON c.object_id = ic.object_id AND c.column_id = ic.column_id
LEFT JOIN sys.partition_schemes ps ON i.data_space_id = ps.data_space_id
LEFT JOIN sys.partition_functions pf ON pf.function_id = ps.function_id
WHERE s.name='[your schema]' AND t.name = '[your table name]'
テーブルに物理パーティションがある場合、次のように、"HasPartition" は "yes" と表示されます。
表の概要
次の表に、Azure SQL Database のコピー アクティビティの詳細を示します。
ソース
名前 | Description | Value | 必須 | JSON スクリプト プロパティ |
---|---|---|---|---|
データ ストアの種類 | データ ストアの種類。 | 外部品目番号 | はい | / |
接続 | ソース データ ストアへの実際の接続。 | <接続> | はい | つながり |
接続の種類 | 実際の接続の種類。 [Azure SQL Database] を選択します。 | Azure SQL Database | はい | / |
テーブル | ソース データ テーブル。 | < コピー先テーブルの名前> | はい | schema table |
クエリの使用 | カスタム SQL クエリを使用してデータを読み取ります。 | • なし • クエリ • ストアド プロシージャ |
いいえ | • sqlReaderQuery • sqlReaderStoredProcedureName、storedProcedureParameters |
クエリ タイムアウト | クエリ コマンドの実行のタイムアウト (既定値は 120 分)。 | TimeSpan | いいえ | queryTimeout |
分離レベル | SQL ソースのトランザクション ロック動作を指定します。 | • None • ReadCommitted • ReadUncommitted • RepeatableRead • Serializable • Snapshot |
いいえ | isolationLevel |
パーティション オプション | Azure SQL データベースからのデータの読み込みに使用されるデータ パーティション分割オプション。 | • なし • テーブルの物理パーティション • 動的範囲 |
いいえ | partitionOption: • PhysicalPartitionsOfTable • DynamicRange |
追加の列 | ソース ファイルの相対パスまたは静的な値を格納するためにデータ列をさらに追加します。 後者では式がサポートされています。 | • 名前 • 値 |
いいえ | additionalColumns: •名前 • value |
宛先
名前 | Description | Value | 必須 | JSON スクリプト プロパティ |
---|---|---|---|---|
データ ストアの種類 | データ ストアの種類。 | 外部品目番号 | はい | / |
接続 | コピー先データ ストアへの接続。 | <実際の接続> | はい | つながり |
接続の種類 | 実際の接続の種類。 [Azure SQL Database] を選択します。 | Azure SQL Database | はい | / |
テーブル | コピー先のデータ テーブル。 | < コピー先テーブルの名前> | はい | schema table |
書き込み動作 | ソースがファイルベース データ ストアのファイルの場合の書き込み動作を定義します。 | • 挿入 • アップサート • ストアド プロシージャ |
いいえ | writeBehavior: • insert • upsert • sqlWriterStoredProcedureName、sqlWriterTableType、storedProcedureParameters |
一括挿入テーブル ロック | この設定を使用すると、複数のクライアントからインデックスがないテーブルに対して一括挿入操作を行う時のコピー パフォーマンスが向上します。 | はいまたはいいえ | いいえ | sqlWriterUseTableLock: true または false |
テーブル オプション | ソース スキーマに基づくテーブルが存在しない場合に、コピー先テーブルを自動的に作成するかどうかを指定します。 | • なし • テーブルの自動作成 |
いいえ | tableOption: • autoCreate |
コピー前スクリプト | 各実行でコピー先テーブルにデータを書き込む前に実行するコピー アクティビティのスクリプト。 このプロパティを使用して、事前に読み込まれたデータをクリーンアップできます。 | <コピー前スクリプト> (文字列) |
いいえ | preCopyScript |
[書き込みバッチ タイムアウト] | タイムアウトするまでに一括挿入操作の完了を待つ時間です。許容される値は期間です。 既定値は「00:30:00」(30 分) です。 | TimeSpan | いいえ | writeBatchTimeout |
[Write batch size](書き込みバッチ サイズ) | SQL テーブルに挿入するバッチあたりの行数。 既定では行のサイズに基づいて、サービスにより適切なバッチ サイズが動的に決定されます。 | <行数> (整数) |
いいえ | writeBatchSize |
最大コンカレント接続数 | アクティビティの実行中にデータ ストアに対して確立されたコンカレント接続数の上限。 コンカレント接続を制限する場合にのみ、値を指定します。 | <コンカレント接続数の上限> (整数) |
いいえ | maxConcurrentConnections |
パフォーマンス メトリック分析を無効にする | この設定は、コピー パフォーマンスの最適化と推奨事項のために、DTU、DWU、RU などのメトリックを収集するために使用されます。 この動作に問題がある場合は、このチェック ボックスをオンにします。 | オンまたはオフ | いいえ | disableMetricsCollection: true または false |