2017-03-28 8 views
1

データファクトリで予定されているパイプラインの実行順序に問題があります。次のようにパイプライン上のデータファクトリ実行命令

私のパイプラインは次のとおりです。 タスク1、タスク2、そして最後にタスク3

{ 
    "name": "Copy_Stage_Upsert", 
    "properties": { 
     "description": "", 
     "activities": [ 
      { 
       "type": "Copy", 
       "typeProperties": { 
        "source": { 
         "type": "BlobSource" 
        }, 
        "sink": { 
         "type": "SqlDWSink", 
         "writeBatchSize": 10000, 
         "writeBatchTimeout": "00:10:00" 
        } 
       }, 
       "inputs": [ 
        { 
         "name": "csv_extracted_file" 
        } 
       ], 
       "outputs": [ 
        { 
         "name": "stage_table" 
        } 
       ], 
       "policy": { 
        "timeout": "01:00:00", 
        "retry": 2 
       }, 
       "scheduler": { 
        "frequency": "Hour", 
        "interval": 1 
       }, 
       "name": "Copy to stage table" 
      }, 
      { 
       "type": "Copy", 
       "typeProperties": { 
        "source": { 
         "type": "SqlDWSource", 
         "sqlReaderQuery": "SELECT * from table WHERE id NOT IN (SELECT id from stage_table) UNION ALL SELECT * from stage_table" 
        }, 
        "sink": { 
         "type": "SqlDWSink", 
         "writeBatchSize": 10000, 
         "writeBatchTimeout": "00:10:00" 
        } 
       }, 
       "inputs": [ 
        { 
         "name": "stage_table" 
        } 
       ], 
       "outputs": [ 
        { 
         "name": "upsert_table" 
        } 
       ], 
       "policy": { 
        "timeout": "01:00:00", 
        "retry": 2 
       }, 
       "scheduler": { 
        "frequency": "Hour", 
        "interval": 1 
       }, 
       "name": "Copy" 
      }, 
      { 
       "type": "SqlServerStoredProcedure", 
       "typeProperties": { 
        "storedProcedureName": "sp_rename_tables" 
       }, 
       "inputs": [ 
        { 
         "name": "upsert_table" 
        } 
       ], 
       "outputs": [ 
        { 
         "name": "table" 
        } 
       ], 
       "scheduler": { 
        "frequency": "Hour", 
        "interval": 1 
       }, 
       "name": "Rename tables" 
      } 
     ], 
     "start": "2017-02-09T18:00:00Z", 
     "end": "9999-02-06T15:00:00Z", 
     "isPaused": false, 
     "hubName": "", 
     "pipelineMode": "Scheduled" 
    } 
} 

簡単にするために、私は1つのパイプラインは、3回の簡単な作業でAと呼ばれてきたことを想像してみてください。

シナリオパイプラインAの

一つの実行が予定。

それとして実行:

タスク1 - >タスク2 - >タスク3

シナリオB

つ以上実行されるようにスケジュールパイプラインAの実行。

それはとして実行:

最初にスケジュールパイプラインタスク1 - >第二のスケジュールパイプラインタスク1 - >最初のスケジュールパイプラインタスク2 - >第二のスケジュールパイプラインタスク2 - >最初のスケジュールパイプラインタスク2 - >最初のスケジュールパイプラインタスク3 - >第二のスケジュールパイプラインタスク3.

ことが可能実行としての第2のシナリオです:

最初にスケジュールパイプラインタスク1 - >最初のスケジュールパイプラインタスク2 - >最初のスケジュールパイプラインタスク3、第二のスケジュールパイプラインをタスク1 - > 2番目のスケジュールされたパイプラインタスク2 - 2番目のスケジュールされたパイプラインタスク3

つまり、2番目のパイプラインが開始される前に最初のスケジュールされたパイプラインを終了する必要があります。

ありがとうございます!

答えて

0

可能です。ただし、依存関係の動作を強制し、記述したとおりにチェーンを作成するには、偽の入出力データセットが必要になります。だから可能ですが、汚れたハック!

これはすばらしい解決策ではなく、2番目のパイプラインの出力/ダウンストリームデータセットが最初のパイプライン間隔と異なるタイムスライス間隔を持つと複雑になります。これを試して理解することをお勧めします。

本当にADFは、あなたが望むように設計されていません。 ではなく、 SQLエージェントジョブのステップのようなものをシーケンスするツールです。 ADFは、スケールおよび並列作業ストリーム用です。

私はマイクロソフトのピープスから囁いて理解しているように、すぐにADFにイベント駆動型スケジューリングが追加される可能性があります。しかし私は確かに分かりません。

これが役に立ちます。

+0

これはハックだと思っていますが、例を投稿できますか?私はそれがどのように見えるかを推測していますが、知識のある人の意見を得ることは良いでしょう。私がこれまでに試したことはすべて失敗しました。 – SteveWilkinson

関連する問題