次の方法で共有


制御テーブルを使用してデータベースから一括コピーを行う

適用対象: 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 内のテーブル名とスキーマは、ソース データベース内のものと同じである必要があります。

このソリューション テンプレートの使用方法

  1. 一括コピーのためにソース データベースのパーティションの一覧を格納するには、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');
    
  2. [データベースからの一括コピー] テンプレートに移動します。 手順 1 で作成した外部制御テーブルへの新しい接続を作成します。

    コントロール テーブルへの新しい接続の作成を示すスクリーンショット。

  3. データのコピー元であるソース データベースへの新しい接続を作成します。

    ソース データベースへの新しい接続の作成を示すスクリーンショット。

  4. データのコピー先である宛先データ ストアへの新しい接続を作成します。

    同期先ストアへの新しい接続の作成を示すスクリーンショット。

  5. [このテンプレートを使用] を選択します。

  6. 次の例に示すように、パイプラインが表示されます。

    パイプライン タスクを示すスクリーンショット。

  7. [デバッグ] を選択し、 [パラメーター] で入力し、 [完了] を選択します。

    [デバッグ] ボタンが表示されたスクリーンショット。

  8. 次の例のような結果が表示されます。

    パイプラインの実行結果を示すスクリーンショット。

  9. (省略可能) データの宛先として "Azure Synapse Analytics" を選択した場合、Azure Synapse Analytics Polybase に必要であれば、ステージングのために Azure Blob Storage への接続を入力する必要があります。 テンプレートを使うと、Blob ストレージのコンテナー パスが自動的に生成されます。 パイプラインの実行後は、コンテナーが作成されているかどうかを確認します。

    Polybase 設定が表示されたスクリーンショット。