【问题标题】:Azure Logic for getting data from SQL to FTP用于将数据从 SQL 获取到 FTP 的 Azure Logic
【发布时间】:2017-02-16 16:52:18
【问题描述】:

我的任务是从 SQL 获取数据并将数据作为 CSV 文件上传到 FTP 服务器。

现在我已经为单个 SQL 行完成了这项工作。 我遇到的问题是遍历所有行(foreach 循环)并将这些行作为 CSV 文件的内容插入。我在 foreach 循环中尝试了 FTP 创建文件任务,但我一次只能访问一行以设置为文件的内容 - 我需要所有行!

还要记住的是,这些文件将有 200k+ 行。

我当然可以为此编写一个 C# 控制台应用程序,但我无需编写任何代码就可以轻松做到这一点,这似乎是一项值得的努力。

【问题讨论】:

    标签: azure azure-logic-apps


    【解决方案1】:

    我们最近为此场景添加了“表格”原语,设计器中的支持仍在进行中,但您可以在代码视图中使用它。

    在以下场景中,我从 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": "deli@microsoft.com"
            },
            "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"
    }
    

    【讨论】:

      【解决方案2】:

      所以只是跟进以显示 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": "grma_tickets_@{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"
              }
      

      【讨论】:

      • 设计器支持应该很快就会到来,但在此之前你会先睹为快。 :) 我们还计划提高从 Get Rows 返回的行数限制,您使用存储过程作为解决方法是正确的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多