2015-11-24 2 views
2

Я использую фабрику данных, и у меня есть активность, которая копирует данные из одного местоположения в другое. Однако я хотел бы, чтобы место назначения было похоже на «контейнер/год/месяц/день», где автоматически генерируются год, месяц и день. Адрес источника и получателя присваивается моей задаче в качестве параметров, поэтому они должны находиться в аргументационной части действия. Я застрял и не знаю, как определить ихКак создать папку на основе даты с помощью Data Factory?

+0

Как вы передать аргументы деятельности? нет раздела аргументов для активности в конвейере .... –

ответ

2

Если вы используете прямой Copy Activity, то вы можете указать путь к папке Blob таким же образом, что вы делаете для входного файла:

{ 
    "name": "AzureBlobOutput", 
    "properties": { 
    "type": "AzureBlob", 
    "linkedServiceName": "StorageLinkedService", 
    "typeProperties": { 
     "folderPath": "mycontainer/myfolder/yearno={Year}/monthno={Month}/dayno={Day}/hourno={Hour}/", 
     "partitionedBy": [ 
     { 
      "name": "Year", 
      "value": { 
      "type": "DateTime", 
      "date": "SliceStart", 
      "format": "yyyy" 
      } 
     }, 
     { 
      "name": "Month", 
      "value": { 
      "type": "DateTime", 
      "date": "SliceStart", 
      "format": "%M" 
      } 
     }, 
     { 
      "name": "Day", 
      "value": { 
      "type": "DateTime", 
      "date": "SliceStart", 
      "format": "%d" 
      } 
     }, 
     { 
      "name": "Hour", 
      "value": { 
      "type": "DateTime", 
      "date": "SliceStart", 
      "format": "%H" 
      } 
     } 
     ], 
     "format": { 
     "type": "TextFormat", 
     "columnDelimiter": "\t", 
     "rowDelimiter": "\n" 
     } 
    }, 
    "availability": { 
     "frequency": "Hour", 
     "interval": 1 
    } 
    } 
} 

Взятые из образцов документации здесь https://azure.microsoft.com/en-us/documentation/articles/data-factory-azure-blob-connector/

Если вы используете пользовательский .NET активность, то вам нужно передать параметры в части ExtendedProperties внутри секции typeProperties JSON:

"typeProperties": { 
      "AssemblyName": "MyDotNetActivity.dll", 
      "EntryPoint": "MyDotNetActivityNS.MyDotNetActivity", 
      "PackageLinkedService": "StorageLinkedService", 
      "PackageFile": "customactivitycontainer/MyDotNetActivity.zip", 
      "extendedProperties": { 
      "SliceStart": "$$Text.Format('{0:yyyyMMddHH-mm}', Time.AddMinutes(SliceStart, 0))" 
      } 
     }, 

, а затем прочитать метаданные ExtendedProperties в вашем C# класса, как показано здесь:

public IDictionary<string, string> Execute(
    IEnumerable<LinkedService> linkedServices, 
    IEnumerable<Dataset> datasets, 
    Activity activity, 
    IActivityLogger logger) 
{ 
    // to get extended properties (for example: SliceStart) 
    DotNetActivity dotNetActivity = (DotNetActivity)activity.TypeProperties; 
    string sliceStartString = dotNetActivity.ExtendedProperties["SliceStart"]; 

    // to log all extended properties   
    IDictionary<string, string> extendedProperties = dotNetActivity.ExtendedProperties; 
    logger.Write("Logging extended properties if any..."); 
    foreach (KeyValuePair<string, string> entry in extendedProperties) 
    { 
     logger.Write("<key:{0}> <value:{1}>", entry.Key, entry.Value); 
    } 
    .... 

Взятые из образцов документации здесь https://azure.microsoft.com/en-gb/documentation/articles/data-factory-use-custom-activities/