В конвейере 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)
Вот пример в 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 здесь, чтобы получить исчерпывающее объяснение и больше сценариев.