制御テーブルを使用してデータベースから一括コピーを行う
適用対象: Azure Data Factory Azure Synapse Analytics
ヒント
企業向けのオールインワン分析ソリューション、Microsoft Fabric の Data Factory をお試しください。 Microsoft Fabric は、データ移動からデータ サイエンス、リアルタイム分析、ビジネス インテリジェンス、レポートまで、あらゆるものをカバーしています。 無料で新しい試用版を開始する方法について説明します。
Oracle サーバー、Netezza、Teradata、または SQL Server 内のデータ ウェアハウスから Azure Synapse Analytics にデータをコピーするには、複数のテーブルから膨大な量のデータを読み込む必要があります。 通常は、複数のスレッドを並列して使用して単一のテーブルから行が読み込まれるように、各テーブルでデータをパーティション化する必要があります。 この記事では、これらのシナリオで使用するテンプレートについて説明します。
Note
データのボリュームが比較的小さい少数のテーブルからデータを Azure Synapse Analytics にコピーする場合、Azure Data Factory のデータ コピー ツール を使用するのがより効率的です。 この記事で説明するテンプレートは、そのシナリオで必要とするものより大きくなっています。
このソリューション テンプレートについて
このテンプレートでは、外部制御テーブルからコピーするソース データベース パーティションの一覧が取得されます。 次に、ソース データベース内の各パーティションが反復処理され、宛先にデータがコピーされます。
このテンプレートには、3 つのアクティビティが含まれています。
- ルックアップでは、外部制御テーブルからデータベース パーティションの一覧が確実に取得されます。
- ForEach では、ルックアップ アクティビティからパーティションの一覧が取得され、各パーティションがコピー アクティビティに対して反復処理されます。
- コピー では各パーティションがソース データベース ストアから宛先ストアにコピーされます。
このテンプレートでは、次のパラメーターを定義します。
- Control_Table_Name は外部制御テーブルであり、ソース データベースのパーティション一覧が格納されています。
- Control_Table_Schema_PartitionID は、各パーティション ID を格納する外部制御テーブル内の列名です。 ソース データベース内の各パーティションのパーティション ID が一意であることを確認してください。
- Control_Table_Schema_SourceTableName は、ソース データベースからのそれぞれのテーブル名を格納する外部制御テーブルです。
- Control_Table_Schema_FilterQuery は、ソース データベース内の各パーティションからデータを取得するためのフィルター クエリを格納する外部制御テーブル内の列名です。 たとえば、ご利用のデータが年単位でパーティション化されている場合、各行に格納されるクエリは、'select * from datasource where LastModifytime >= ''2015-01-01 00:00:00'' and LastModifytime <= ''2015-12-31 23:59:59.999''' のようになります。
- Data_Destination_Folder_Path は、データが宛先ストアにコピーされる先のパスです (選択した宛先が "ファイル システム" または "Azure Data Lake Storage Gen1" の場合に適用されます)。
- Data_Destination_Container は、データが宛先ストアにコピーされる先のルート フォルダーのパスです。
- Data_Destination_Directory は、データが宛先ストアにコピーされる先のルート以下のディレクトリ パスです。
宛先ストアのパスを定義する最後の 3 つのパラメーターは、選択した宛先がファイルベースのストレージである場合にのみ表示されます。 宛先ストアとして "Azure Synapse Analytics" を選択した場合、これらのパラメーターは不要です。 ただし、Azure Synapse Analytics 内のテーブル名とスキーマは、ソース データベース内のものと同じである必要があります。
このソリューション テンプレートの使用方法
一括コピーのためにソース データベースのパーティションの一覧を格納するには、SQL Server または Azure SQL Database 内に制御テーブルを作成します。 次の例では、ソース データベース内に 5 つのパーティションがあります。 3 つのパーティションは datasource_table 用で、2 つのテーブルは project_table 用です。 ソース データベースからのテーブル datasource_table 内のデータをパーティション分割するには、列 LastModifytime が使用されます。 最初のパーティションを読み取るために使われるクエリは 'select * from datasource_table where LastModifytime >= ''2015-01-01 00:00:00'' and LastModifytime <= ''2015-12-31 23:59:59.999''' です。 同様のクエリを使用して、他のパーティションからもデータを読み取ることができます。
Create table ControlTableForTemplate ( PartitionID int, SourceTableName varchar(255), FilterQuery varchar(255) ); INSERT INTO ControlTableForTemplate (PartitionID, SourceTableName, FilterQuery) VALUES (1, 'datasource_table','select * from datasource_table where LastModifytime >= ''2015-01-01 00:00:00'' and LastModifytime <= ''2015-12-31 23:59:59.999'''), (2, 'datasource_table','select * from datasource_table where LastModifytime >= ''2016-01-01 00:00:00'' and LastModifytime <= ''2016-12-31 23:59:59.999'''), (3, 'datasource_table','select * from datasource_table where LastModifytime >= ''2017-01-01 00:00:00'' and LastModifytime <= ''2017-12-31 23:59:59.999'''), (4, 'project_table','select * from project_table where ID >= 0 and ID < 1000'), (5, 'project_table','select * from project_table where ID >= 1000 and ID < 2000');
[データベースからの一括コピー] テンプレートに移動します。 手順 1 で作成した外部制御テーブルへの新しい接続を作成します。
データのコピー元であるソース データベースへの新しい接続を作成します。
データのコピー先である宛先データ ストアへの新しい接続を作成します。
[このテンプレートを使用] を選択します。
次の例に示すように、パイプラインが表示されます。
[デバッグ] を選択し、 [パラメーター] で入力し、 [完了] を選択します。
次の例のような結果が表示されます。
(省略可能) データの宛先として "Azure Synapse Analytics" を選択した場合、Azure Synapse Analytics Polybase に必要であれば、ステージングのために Azure Blob Storage への接続を入力する必要があります。 テンプレートを使うと、Blob ストレージのコンテナー パスが自動的に生成されます。 パイプラインの実行後は、コンテナーが作成されているかどうかを確認します。