【发布时间】:2019-09-03 07:42:24
【问题描述】:
我想调用一个 rest api 并将结果保存为 Azure Data Lake Gen2 中的 csv 或 json 文件。 根据我所阅读的内容,Azure Functions 是可行的方法。
网络服务返回如下格式的数据:
"ID","ProductName","Company"
"1","Apples","Alfreds futterkiste"
"2","Oranges","Alfreds futterkiste"
"3","Bananas","Alfreds futterkiste"
"4","Salad","Alfreds futterkiste"
...next rows
我用 C# 编写了一个控制台应用程序,目前将数据输出到控制台。 Web 服务使用分页并返回 1000 行(由 &num 参数确定,最大值为 1000)。在第一个请求之后,我可以使用 &next-parameter 根据 ID 获取接下来的 1000 行。例如网址
http://testWebservice123.com/Example.csv?auth=abc&number=1000&next=1000
将为我提供从 ID 1001 到 2000 的行。 (API 的调用和实际的分页有点复杂,因此我不能使用 Azure Data Factory_v2 来加载到 Azure Data Lake - 这就是我认为我需要 Azure Functions 的原因 - 除非我忽略了另一个服务??。所以下面只是一个演示,学习如何写入 Azure Data Lake。)
我有以下 C#:
static void Main(string[] args)
{
string startUrl = "http://testWebservice123.com/Example.csv?auth=abc&number=1000";
string url = "";
string deltaRequestParameter = "";
string lastLine;
int numberOfLines = 0;
do
{
url = startUrl + deltaRequestParameter;
WebClient myWebClient = new WebClient();
using (Stream myStream = myWebClient.OpenRead(url))
{
using (StreamReader sr = new StreamReader(myStream))
{
numberOfLines = 0;
while (!sr.EndOfStream)
{
var row = sr.ReadLine();
var values = row.Split(',');
//do whatever with the rows by now - i.e. write to console
Console.WriteLine(values[0] + " " + values[1]);
lastLine = values[0].Replace("\"", ""); //last line in the loop - get the last ID.
numberOfLines++;
deltaRequestParameter = "&next=" + lastLine;
}
}
}
} while (numberOfLines == 1001); //since the header is returned each time the number of rows will be 1001 until we get to the last request
}
我想以最有效的方式将数据写入数据湖的 csv 文件。 我将如何重写上述代码以在 Azure Function 中工作并保存到 Azure 数据湖 gen2 中的 csv?
【问题讨论】:
标签: c# azure azure-functions azure-data-lake