2016-03-13 2 views
2

У меня есть 2 файла blob для копирования в Azure SQL-таблицы. Мой трубопровод с двумя видами деятельности:Azure Data Factory - Несколько действий в порядке выполнения трубопровода

{ 
    "name": "NutrientDataBlobToAzureSqlPipeline", 
    "properties": { 
     "description": "Copy nutrient data from Azure BLOB to Azure SQL", 
     "activities": [ 
      { 
       "type": "Copy", 
       "typeProperties": { 
        "source": { 
         "type": "BlobSource" 
        }, 
        "sink": { 
         "type": "SqlSink", 
         "writeBatchSize": 10000, 
         "writeBatchTimeout": "60.00:00:00" 
        } 
       }, 
       "inputs": [ 
        { 
         "name": "FoodGroupDescriptionsAzureBlob" 
        } 
       ], 
       "outputs": [ 
        { 
         "name": "FoodGroupDescriptionsSQLAzure" 
        } 
       ], 
       "policy": { 
        "timeout": "01:00:00", 
        "concurrency": 1, 
        "executionPriorityOrder": "NewestFirst" 
       }, 
       "scheduler": { 
        "frequency": "Minute", 
        "interval": 15 
       }, 
       "name": "FoodGroupDescriptions", 
       "description": "#1 Bulk Import FoodGroupDescriptions" 
      }, 
      { 
       "type": "Copy", 
       "typeProperties": { 
        "source": { 
         "type": "BlobSource" 
        }, 
        "sink": { 
         "type": "SqlSink", 
         "writeBatchSize": 10000, 
         "writeBatchTimeout": "60.00:00:00" 
        } 
       }, 
       "inputs": [ 
        { 
         "name": "FoodDescriptionsAzureBlob" 
        } 
       ], 
       "outputs": [ 
        { 
         "name": "FoodDescriptionsSQLAzure" 
        } 
       ], 
       "policy": { 
        "timeout": "01:00:00", 
        "concurrency": 1, 
        "executionPriorityOrder": "NewestFirst" 
       }, 
       "scheduler": { 
        "frequency": "Minute", 
        "interval": 15 
       }, 
       "name": "FoodDescriptions", 
       "description": "#2 Bulk Import FoodDescriptions" 
      } 
     ], 
     "start": "2015-07-14T00:00:00Z", 
     "end": "2015-07-14T00:00:00Z", 
     "isPaused": false, 
     "hubName": "gymappdatafactory_hub", 
     "pipelineMode": "Scheduled" 
    } 
} 

Как я понял, как только первая деятельность будет завершена, второй запуск. Как выполнить этот конвейер, вместо того, чтобы идти на срезы набора данных и запускать вручную? Также pipeMode как я могу установить только одно время, а не по расписанию?

ответ

2

Для того чтобы операции выполнялись синхронно (упорядочивались), выход первого конвейера должен был быть входным сигналом второго конвейера.

{ 
"name": "NutrientDataBlobToAzureSqlPipeline", 
"properties": { 
    "description": "Copy nutrient data from Azure BLOB to Azure SQL", 
    "activities": [ 
     { 
      "type": "Copy", 
      "typeProperties": { 
       "source": { 
        "type": "BlobSource" 
       }, 
       "sink": { 
        "type": "SqlSink", 
        "writeBatchSize": 10000, 
        "writeBatchTimeout": "60.00:00:00" 
       } 
      }, 
      "inputs": [ 
       { 
        "name": "FoodGroupDescriptionsAzureBlob" 
       } 
      ], 
      "outputs": [ 
       { 
        "name": "FoodGroupDescriptionsSQLAzureFirst" 
       } 
      ], 
      "policy": { 
       "timeout": "01:00:00", 
       "concurrency": 1, 
       "executionPriorityOrder": "NewestFirst" 
      }, 
      "scheduler": { 
       "frequency": "Minute", 
       "interval": 15 
      }, 
      "name": "FoodGroupDescriptions", 
      "description": "#1 Bulk Import FoodGroupDescriptions" 
     }, 
     { 
      "type": "Copy", 
      "typeProperties": { 
       "source": { 
        "type": "BlobSource" 
       }, 
       "sink": { 
        "type": "SqlSink", 
        "writeBatchSize": 10000, 
        "writeBatchTimeout": "60.00:00:00" 
       } 
      }, 
      "inputs": [ 
       { 
        "name": "FoodGroupDescriptionsSQLAzureFirst", 
        "name": "FoodDescriptionsAzureBlob" 
       } 
      ], 
      "outputs": [ 
       { 
        "name": "FoodDescriptionsSQLAzureSecond" 
       } 
      ], 
      "policy": { 
       "timeout": "01:00:00", 
       "concurrency": 1, 
       "executionPriorityOrder": "NewestFirst" 
      }, 
      "scheduler": { 
       "frequency": "Minute", 
       "interval": 15 
      }, 
      "name": "FoodDescriptions", 
      "description": "#2 Bulk Import FoodDescriptions" 
     } 
    ], 
    "start": "2015-07-14T00:00:00Z", 
    "end": "2015-07-14T00:00:00Z", 
    "isPaused": false, 
    "hubName": "gymappdatafactory_hub", 
    "pipelineMode": "Scheduled" 
} 

Если вы заметили, что выход первого действия «FoodGroupDescriptionsSQLAzureFirst» становится входным во второй деятельности.

0

Если я правильно понял, вы хотите выполнить оба действия без ручного выполнения срезов набора данных.

Вы можете сделать это просто путем определения набора данных как внешнего.

В качестве примера

{ 
    "name": "FoodGroupDescriptionsAzureBlob", 
    "properties": { 
     "type": "AzureBlob", 
     "linkedServiceName": "AzureBlobStore", 
     "typeProperties": { 
      "folderPath": "mycontainer/folder", 
      "format": { 
       "type": "TextFormat", 
       "rowDelimiter": "\n", 
       "columnDelimiter": "|" 
      } 
     }, 
     "external": true, 
     "availability": { 
      "frequency": "Day", 
      "interval": 1 
     } 
    } 
} 

Заметим, что свойство внешний отмечен как верно. Это переместит набор данных в состояние готовности автоматически. К сожалению, не было отметки о трубопроводе, как запускается один раз. После запуска конвейера, если у вас есть опция установки значения isPaused в true, чтобы предотвратить дальнейшие действия.

Примечание:внешний свойство может быть установлено значение справедливо только для наборов входных данных. Все действия, которые имеют набор входных данных, который обозначен как , будут выполняться параллельно..