読者です 読者をやめる 読者になる 読者になる

かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

Data Lake Analyticsに.NETからクエリを投げる

Azure

下準備については1つ前のエントリを参照してください。

blog.okazuki.jp

下準備で作ったプロジェクトに以下のアセンブリをNuGetから追加します(プレリリースで)

  • Microsoft.Azure.Management.DataLake.Analytics

そして下準備のプログラムに以下のような感じのプログラムを追加します。

// data upload
var ms = new MemoryStream();
var sw = new StreamWriter(ms);
sw.WriteLine("taro,12");
sw.WriteLine("jiro,14");
ms.Seek(0, SeekOrigin.Begin);
adlsFileSystemClient.FileSystem.Create("/sample1/data.csv", "Data Lakeストレージのアカウント名", ms, overwrite: true);

// 実行するクエリ
var query = @"
    @src =
        EXTRACT
            Name string,
            Age int
        FROM ""/sample1/data.csv""
        USING Extractors.Csv();
    OUTPUT @src
        TO ""/sample1/output.csv""
        USING Outputters.Csv();";
// init
var adlaClient = new DataLakeAnalyticsAccountManagementClient(tokenCredentials)
{
    SubscriptionId = SubscriptionId
};
var adlaJobClient = new DataLakeAnalyticsJobManagementClient(tokenCredentials)
{
    SubscriptionId = SubscriptionId
};
var adlaCatalogClient = new DataLakeAnalyticsCatalogManagementClient(tokenCredentials)
{
    SubscriptionId = SubscriptionId
};

// add account(これいるのかな?? Createは動かなかった…)
adlaClient.Account.AddDataLakeStoreAccount("datalake",
    "dlsample",
    "dlsampleadls",
    new AddDataLakeStoreParameters(new DataLakeStoreAccountInfoProperties()));

var jobId = Guid.NewGuid();
var properties = new USqlJobProperties(query);
var parameters = new JobInformation("copy", JobType.USql, properties);
var jobInfo = adlaJobClient.Job.Create(jobId, parameters, "Data Lake Analyticsのアカウント名");
while (jobInfo.State != JobState.Ended)
{
    Console.WriteLine($"Waiting... {jobInfo.State}");
    Task.Delay(1000).Wait();
    jobInfo = adlaJobClient.Job.Get(jobId, "Data Lake Analyticsのアカウント名");
}
var jobResult = jobInfo.Result.Value;
Console.WriteLine(jobResult);
Console.ReadKey();