是否可以从Azure数据基表读取数据并使用Azure功能将其写入Azure Data Lake文件?

时间:2017-06-19 11:07:45

标签: azure azure-functions azure-data-lake

我正在尝试实现一个时间触发器功能,它连接到Azure DB并从表中获取内容。在此之后,我正在寻找使用BCP将此数据写入Azure Data湖文件的可能性。下面是我的函数和Json脚本

#r "System.Configuration"
#r "System.Data"
#r "System.IO"
using System.Configuration;
using System.Data.SqlClient;
using System.Threading.Tasks;
using System;
using System.IO;
using System.Net;
public static void Run(TimerInfo myTimer, TraceWriter log)
{
    var str = ConfigurationManager.ConnectionStrings["sqldb_connection"].ConnectionString;
    log.Info($"C# Timer trigger function executed at: {DateTime.Now}");
    using (SqlConnection conn = new SqlConnection(str))
    {
    conn.Open();
    System.Diagnostics.Process proc = new System.Diagnostics.Process();
    proc.StartInfo.FileName = "bcp";
    proc.StartInfo.Arguments = "\"select * from Person \""+ "queryout 'DatalakeFilepath' -S test-server.database.windows.net -U username -P password  -d database -N";
    proc.Start();
    }
}


//Json:
{
  "bindings": [
    {
      "name": "myTimer",
      "type": "timerTrigger",
      "direction": "in",
      "schedule": "0 */5 * * * *"
    }
  ],
  "disabled": false
}

2017-06-19T11:29:31.957执行函数时出现异常:Functions.OcDataTimerTriggerCSharp。 mscorlib:调用目标抛出了异常。系统:系统找不到指定的文件。

1 个答案:

答案 0 :(得分:0)

(Azure Data Lake团队在这里)

从Azure功能写入Azure Data Lake Store(ADLS)是可能的 - 但不是您在上面的代码中执行此操作的方式。

您无法写入ADLS文件系统,就好像它是本地驱动器或文件共享一样。因此,在ADLS帐户中使用目标路径调用BCP将不起作用。

有几种选择。 Azure功能可以:

  • 运行ADF管道
  • 启动U-SQL作业以从Azure SQL读取并写入ADLS。
  • 逐行从SQL DB中手动读取并将行写入ADLS