2016-05-30 10 views
1

Hallo Ich verwende Azure Data Factory für eine Kopie Aktivität. ich die Kopie soll über einen Container rekursiv sein und es Unterordner wie folgt: myfolder/Jahr/Monat/Tag/Stunde}Azure Data Factory rekursive Kopie aus dem Container

/New_Generated_File.csv

die Dateien, die ich zu erzeugen und in den Ordner zu importieren haben immer eine anderer Name.

Das Problem ist, dass Aktivität auf ewig zu warten scheint.

Die Pipeline ist stündlich geplant.

Ich füge den JSON-Code des Datasets und den verknüpften Dienst an.

Datensatz:

{ 
"name": "Txns_In_Blob", 
"properties": { 
    "structure": [ 
     { 
      "name": "Column0", 
      "type": "String" 
     }, 
     [....Other Columns....] 
    ], 
    "published": false, 
    "type": "AzureBlob", 
    "linkedServiceName": "LinkedService_To_Blob", 
    "typeProperties": { 
     "folderPath": "uploadtransactional/yearno={Year}/monthno={Month}/dayno={Day}/hourno={Hour}/{Custom}.csv", 
     "format": { 
      "type": "TextFormat", 
      "rowDelimiter": "\n", 
      "columnDelimiter": " " 
     } 
    }, 
    "availability": { 
     "frequency": "Hour", 
     "interval": 1 
    }, 
    "external": true, 
    "policy": {} 
} 

}

verlinkte Service:

{ 
"name": "LinkedService_To_Blob", 
"properties": { 
    "description": "", 
    "hubName": "dataorchestrationsystem_hub", 
    "type": "AzureStorage", 
    "typeProperties": { 
     "connectionString": "DefaultEndpointsProtocol=https;AccountName=wizestorage;AccountKey=**********" 
    } 
} 

}

Antwort

2

Es ist nicht zwingend notwendig, die Dateinamen in der Datenmenge folderPath Eigenschaft zu geben. Einfach den Dateinamen entfernen und dann werden alle Dateien von der datafactory für Sie geladen.

{ 
    "name": "Txns_In_Blob", 
    "properties": { 
    "structure": [ 
     { 
      "name": "Column0", 
      "type": "String" 
     }, 
     [....Other Columns....] 
    ], 
    "published": false, 
    "type": "AzureBlob", 
    "linkedServiceName": "LinkedService_To_Blob", 
    "typeProperties": { 
     "folderPath": "uploadtransactional/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": "hh" } } 
     ], 
     "format": { 
      "type": "TextFormat", 
      "rowDelimiter": "\n", 
      "columnDelimiter": " " 
     } 
    }, 
    "availability": { 
     "frequency": "Hour", 
     "interval": 1 
    }, 
    "external": true, 
    "policy": {} 
} 

Mit dem obigen folderPath wird es die Laufzeitwert uploadtransactional/yearno=2016/monthno=05/dayno=30/hourno=07/ für eine Pipeline erzeugen, die jetzt UTC-Zeitzone führt

+0

Sie für die Antwort danken. Was Sie sagen, ist richtig und ich habe das auch versucht, aber warum die Pipeline für immer wartet? Ich habe überprüft, dass der Parameter "external" auf false gesetzt ist. Ich erhalte diesen Fehler: Blob https://wizestorage.blob.core.windows.net/upl/yearno={Year}/monthno={Month}/dayno={Day}/hourno={Hour}/ nicht exist Es scheint, dass es das Skript nicht in den tatsächlichen Pfad konvertiert. –

+0

Haben Sie die Logik definiert, um Werte für {Hour} {Year} usw. festzulegen? – Sandesh

+0

Wenn das Dataset als extern markiert ist, wird die Pipeline sofort ausgeführt. Wenn es auf false gesetzt ist, dann wird es warten, bis irgendeine ** _ andere Pipeline erzeugt wird. ** ** der Datensatz – Sandesh