Generate ADF pipeline JSON with proper structure, activities, and best practices
Generates Azure Data Factory pipeline JSON with proper structure, activities, and best practices
/plugin marketplace add JosiahSiegel/claude-plugin-marketplace/plugin install adf-master@claude-plugin-marketplace<pipeline-name> <description-of-requirements>Generate Azure Data Factory pipeline JSON files following best practices and avoiding common pitfalls.
Create a complete, valid ADF pipeline JSON based on the provided requirements.
$ARGUMENTS: Pipeline name followed by requirements description
PL_SalesETL Copy sales data from Azure SQL to Parquet in ADLS, partitioned by datePL_DailyLoad Load multiple tables using ForEach with config lookupPL_APIIngestion Fetch data from REST API with pagination and error handling{
"name": "<PipelineName>",
"properties": {
"activities": [],
"parameters": {},
"variables": {},
"annotations": [],
"folder": { "name": "<FolderName>" }
}
}
PL_<Domain>_<Action> (e.g., PL_Sales_DailyLoad)<Type>_<Purpose> (e.g., Copy_SalesToParquet, ForEach_Tables)var<Name> (e.g., varCounter, varResults)<Name> (e.g., ProcessDate, TableList)NEVER create prohibited combinations:
If nested control flow is required, use Execute Pipeline pattern.
Copy with Lookup Config:
{
"activities": [
{
"name": "Lookup_GetTables",
"type": "Lookup",
"typeProperties": {
"source": { "type": "AzureSqlSource", "sqlReaderQuery": "SELECT * FROM Config.Tables" },
"dataset": { "referenceName": "DS_Config", "type": "DatasetReference" },
"firstRowOnly": false
}
},
{
"name": "ForEach_Tables",
"type": "ForEach",
"dependsOn": [{ "activity": "Lookup_GetTables", "dependencyConditions": ["Succeeded"] }],
"typeProperties": {
"items": { "value": "@activity('Lookup_GetTables').output.value", "type": "Expression" },
"isSequential": false,
"batchCount": 20,
"activities": [...]
}
}
]
}
Error Handling with Fail:
{
"name": "Fail_OnError",
"type": "Fail",
"dependsOn": [{ "activity": "Copy_Data", "dependencyConditions": ["Failed"] }],
"typeProperties": {
"message": "Copy activity failed: @{activity('Copy_Data').error.message}",
"errorCode": "COPY_FAILED"
}
}
After generating, mentally validate against: