Как создать зависимость между действиями Pipeline для фабрики данных Azure в Python

1

В конвейере Azure DataFactory я пытаюсь сделать два экземпляра CopyActivities последовательно, т.е. Сначала копирует данные из таблицы blob в SQL, затем вторая копирует таблицу SQL в другую базу данных.

Я пробовал код ниже, но конвейер результатов не имеет зависимости, основанной на действиях (проверен в интерфейсе Azure от диаграммы последовательности операций и JSON). Когда я запускаю конвейер, я получил сообщение об ошибке, как показано ниже: "ErrorResponseException: проверка шаблона не удалась:" Свойство "runAfter" действия шаблона "мое второе имя деятельностиScope" в строке "1" и столбце "22521" содержит несуществующие балабабла.... "

Как только я вручную добавлю зависимость в пользовательский интерфейс Azure, я могу успешно запустить конвейер.

Я ценю, если кто-то может указать мне пример кода (Python/С#/Powershell) или документ. Мой код Python:

    def createDataFactoryRectStage(self,  
                               aPipelineName, aActivityStageName, aActivityAcquireName,
                               aRectFileName, aRectDSName,
                               aStageTableName, aStageDSName,
                               aAcquireTableName, aAcquireDSName):
    adf_client = self.__getAdfClient()

    ds_blob = AzureBlobDataset(linked_service_name = LinkedServiceReference(AZURE_DATAFACTORY_LS_BLOB_RECT), 
                               folder_path=PRJ_AZURE_BLOB_PATH_RECT, 
                               file_name = aRectFileName,
                               format = {"type": "TextFormat",
                                         "columnDelimiter": ",",
                                         "rowDelimiter": "",
                                         "nullValue": "\\N",
                                         "treatEmptyAsNull": "true",
                                         "firstRowAsHeader": "true",
                                         "quoteChar": "\"",})    
    adf_client.datasets.create_or_update(AZURE_RESOURCE_GROUP, AZURE_DATAFACTORY, aRectDSName, ds_blob)

    ds_stage= AzureSqlTableDataset(linked_service_name = LinkedServiceReference(AZURE_DATAFACTORY_LS_SQLDB_STAGE), 
                                   table_name='[dbo].[' + aStageTableName + ']')      
    adf_client.datasets.create_or_update(AZURE_RESOURCE_GROUP, AZURE_DATAFACTORY, aStageDSName, ds_stage)

    ca_blob_to_stage = CopyActivity(aActivityStageName, 
                                    inputs=[DatasetReference(aRectDSName)], 
                                    outputs=[DatasetReference(aStageDSName)], 
                                    source= BlobSource(), 
                                    sink= SqlSink(write_batch_size = AZURE_SQL_WRITE_BATCH_SIZE))

    ds_acquire= AzureSqlTableDataset(linked_service_name = LinkedServiceReference(AZURE_DATAFACTORY_LS_SQLDB_ACQUIRE), 
                                     table_name='[dbo].[' + aAcquireTableName + ']')      
    adf_client.datasets.create_or_update(AZURE_RESOURCE_GROUP, AZURE_DATAFACTORY, aAcquireDSName, ds_acquire)
    dep = ActivityDependency(ca_blob_to_stage, dependency_conditions =[DependencyCondition('Succeeded')])

    ca_stage_to_acquire = CopyActivity(aActivityAcquireName, 
                                       inputs=[DatasetReference(aStageDSName)], 
                                       outputs=[DatasetReference(aAcquireDSName)], 
                                       source= SqlSource(), 
                                       sink= SqlSink(write_batch_size = AZURE_SQL_WRITE_BATCH_SIZE),
                                       depends_on=[dep])

    p_obj = PipelineResource(activities=[ca_blob_to_stage, ca_stage_to_acquire], parameters={})

    return adf_client.pipelines.create_or_update(AZURE_RESOURCE_GROUP, AZURE_DATAFACTORY, aPipelineName, p_obj)
Теги:
dependencies
azure-data-factory

1 ответ

0

Вот пример в C# который в основном выполняет действия Chaining activities и цепочки в последовательности в конвейере. Помните, что в ADFV1 нам нужно было сконфигурировать вывод активности как вход другого действия, чтобы связать их и заставить их зависеть друг от друга.

Фрагмент кода трубопровода (обратите внимание на свойство dependOn, которое гарантирует, что второе действие запускается после завершения первого действия)

static PipelineResource PipelineDefinition(DataFactoryManagementClient client) {
 Console.WriteLine("Creating pipeline " + pipelineName + "...");
 PipelineResource resource = new PipelineResource {
   Activities = new List < Activity > {
    new CopyActivity {
     Name = copyFromBlobToSQLActivity,
      Inputs = new List < DatasetReference > {
       new DatasetReference {
        ReferenceName = blobSourceDatasetName
       }
      },
      Outputs = new List<DatasetReference>
      {
       new DatasetReference {
        ReferenceName = sqlDatasetName
       }
      },
      Source = new BlobSource {},
      Sink = new SqlSink {}
    },
    new CopyActivity {
     Name = copyToSQLServerActivity,
      Inputs = new List < DatasetReference > {
       new DatasetReference {
        ReferenceName = sqlDatasetName
       }
      },
      Outputs = new List<DatasetReference>
      {
       new DatasetReference {
        ReferenceName = sqlDestinationDatasetName
       }
      },
      Source = new SqlSource {},
      Sink = new SqlSink {},
      DependsOn = new List < ActivityDependency > {
       new ActivityDependency {
        Activity = copyFromBlobToSQLActivity,
         DependencyConditions = new List < String > {
          "Succeeded"
         }
       }
      }
    }
   }
 };
 Console.WriteLine(SafeJsonConvert.SerializeObject(resource, client.SerializationSettings));
 return resource;
}

Ознакомьтесь с учебником ADFV2 здесь, чтобы получить исчерпывающее объяснение и больше сценариев.

  • 0
    Спасибо, Абхишек. Этот фрагмент C # точно такой же, как мой фрагмент Python выше, за исключением встроенного стиля. Я на самом деле использовал пример кода ADFV2 Python для создания своего фрагмента. Я понятия не имею, почему мой фрагмент Python не установил зависимость. Я фактически протестировал два CopyActivites по отдельности, оба они могут работать. Вы проверили JSON и диаграмму своего конвейера?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню