2017-02-16 64 views
0

我的任務是從SQL中獲取數據並將數據作爲CSV文件上傳到FTP服務器。用於從SQL獲取數據到FTP的Azure邏輯

現在我已經完成了單個SQL行的這一點。 我遇到的問題是遍歷所有行(foreach循環)並插入這些行作爲CSV文件的內容。我已經嘗試了一個FTP創建文件任務在一個foreach循環中,但我一次只能訪問一行來設置文件的內容 - 我需要所有的行!

另外要記住的是,這些文件將有200k +行。

我當然可以爲此編寫一個C#控制檯應用程序,但是在沒有編寫任何代碼的情況下,我能夠輕鬆獲得這一點,看起來這將是一個值得的努力。

回答

1

我們最近爲這個場景添加了「Table」原語,在設計器中的支持仍在繼續,但您可以在代碼視圖中使用它。

在下面的場景中,我從SQL Azure中的表中獲取行,使用兩列使用SQL查詢(名字,姓氏)中的數據生成CSV,然後通過電子郵件發送。

"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

因此,只需跟隨下面的內容來展示Derek的答案如何幫助我解決大量行以獲取FTP服務器上的文件。我最終使用了執行存儲過程操作的輸出主體,因爲GetRows操作被限制爲512行。

注意:由於表格操作在設計器中不可用,但是,請在代碼查看器中執行所有操作,打開設計器導致出現問題並在一個點刪除所有代碼。

"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

設計師支持應該很快就會到來,但在此之前你會得到一個新功能的尖峯。 :)我們還計劃增加從Get Rows返回的行數的限制,並且您在使用存儲過程作爲解決方法時是正確的。 –