2017-02-16 1 views
0

J'ai pour tâche de prendre des données à partir de SQL et de télécharger les données sous forme de fichier CSV jusqu'à un serveur FTP.Azure Logic pour l'envoi de données de SQL à FTP

Maintenant, j'ai fait cela pour une seule ligne SQL très bien. Le problème que je rencontre est en boucle sur toutes les lignes (boucle foreach) et en insérant ces lignes comme le contenu du fichier CSV. J'ai essayé une tâche de création de fichier FTP dans une boucle foreach, mais je ne peux accéder à une seule ligne à la fois pour définir le contenu du fichier - j'ai besoin de toutes les lignes!

Gardez également à l'esprit que ces fichiers auront 200 000 lignes et plus.

Je pourrais bien sûr écrire une application console C# pour cela, mais la facilité avec laquelle je suis arrivé jusqu'à présent sans écrire de code me donne l'impression que ce sera un effort valable.

Répondre

1

Nous avons récemment ajouté une primitive "Table" pour ce scénario, la prise en charge dans le concepteur est toujours en cours, mais vous pouvez l'utiliser en mode Code.

Dans le scénario ci-dessous, j'obtiens des lignes d'une table dans SQL Azure, produisant un fichier CSV avec deux colonnes utilisant les données de la requête SQL (Prénom, Nom), puis l'envoyant par courrier électronique.

"Get_rows": { 
    "inputs": { 
     "host": { 
      "api": { 
       "runtimeUrl": "https://logic-apis-southcentralus.azure-apim.net/apim/sql" 
      }, 
      "connection": { 
       "name": "@parameters('$connections')['sql']['connectionId']" 
      } 
     }, 
     "method": "get", 
     "path": "/datasets/default/tables/@{encodeURIComponent(encodeURIComponent('[SalesLT].[Customer]'))}/items", 
     "queries": { 
      "$top": 10 
     } 
    }, 
    "runAfter": {}, 
    "type": "ApiConnection" 
}, 
"tableCsv0": { 
    "inputs": { 
     "columns": [ 
      { 
       "header": "First Name", 
       "value": "@item()?['FirstName']" 
      }, 
      { 
       "header": "Last Name", 
       "value": "@item()?['LastName']" 
      } 
     ], 
     "format": "csv", 
     "from": "@body('Get_rows')?['value']" 
    }, 
    "runAfter": { 
     "Get_rows": [ 
      "Succeeded" 
     ] 
    }, 
    "type": "Table" 
}, 
"Send_an_email": { 
    "inputs": { 
     "body": { 
      "Body": "@body('tableCsv0')", 
      "Subject": "Subject", 
      "To": "[email protected]" 
     }, 
     "host": { 
      "api": { 
       "runtimeUrl": "https://logic-apis-southcentralus.azure-apim.net/apim/office365" 
      }, 
      "connection": { 
       "name": "@parameters('$connections')['office365']['connectionId']" 
      } 
     }, 
     "method": "post", 
     "path": "/Mail" 
    }, 
    "runAfter": { 
     "tableCsv0": [ 
      "Succeeded" 
     ] 
    }, 
    "type": "ApiConnection" 
} 
0

donc juste après pour montrer comment la réponse de Derek m'a aidé avec mon problème pour obtenir un grand nombre de lignes dans un fichier sur un serveur FTP. J'ai fini par utiliser le corps de sortie de l'action Execute Stored Procedure car l'action GetRows était limitée à 512 lignes.

REMARQUE: Comme l'action Table n'est pas disponible dans le concepteur, faites tout dans le visualiseur de code, l'ouverture du concepteur a provoqué des problèmes et supprimé tout mon code à un moment donné.

"actions": { 
     "Create_file": { 
      "inputs": { 
       "body": "@body('tableCsv0')", 
       "host": { 
        "api": { 
         "runtimeUrl": "https://logic-apis-northeurope.azure-apim.net/apim/ftp" 
        }, 
        "connection": { 
         "name": "@parameters('$connections')['ftp']['connectionId']" 
        } 
       }, 
       "method": "post", 
       "path": "/datasets/default/files", 
       "queries": { 
        "folderPath": "transactions/ready/ecommerce/tickets_test/", 
        "name": "[email protected]{formatDateTime(utcNow(),'yyyyMMdd_hhmmss')}.csv" 
       } 
      }, 
      "runAfter": { 
       "tableCsv0": [ 
        "Succeeded" 
       ] 
      }, 
      "type": "ApiConnection" 
     }, 
     "Execute_stored_procedure": { 
      "inputs": { 
       "host": { 
        "api": { 
         "runtimeUrl": "https://logic-apis-northeurope.azure-apim.net/apim/sql" 
        }, 
        "connection": { 
         "name": "@parameters('$connections')['sql']['connectionId']" 
        } 
       }, 
       "method": "post", 
       "path": "/datasets/default/procedures/@{encodeURIComponent(encodeURIComponent('[Scheduledjob].[GetBArcodesForGRMA]'))}" 
      }, 
      "runAfter": {}, 
      "type": "ApiConnection" 
     }, 
     "tableCsv0": { 
      "inputs": { 
       "columns": [ 
        { 
         "header": "EventDateTime", 
         "value": "@item()?['EventDateTime']" 
        }, 
        { 
         "header": "EventName", 
         "value": "@item()?['EventName']" 
        } 
       ], 
       "format": "csv", 
       "from": "@body('Execute_stored_procedure')['ResultSets']['Table1']" 
      }, 
      "runAfter": { 
       "Execute_stored_procedure": [ 
        "Succeeded" 
       ] 
      }, 
      "type": "Table" 
     } 
+0

La prise en charge du concepteur devrait bientôt arriver, mais vous bénéficiez d'un avant-goût de la nouvelle fonctionnalité avant cela. :) Nous avons également prévu d'augmenter la limite du nombre de lignes renvoyées à partir de Get Rows, et vous avez raison d'utiliser proc stockée comme une solution de contournement. –