Köra och testa U-SQL med Azure Data Lake U-SQL SDK
När du utvecklar U-SQL-skript är det vanligt att köra och testa U-SQL-skript lokalt innan du skickar det till molnet. Azure Data Lake tillhandahåller ett NuGet-paket med namnet Azure Data Lake U-SQL SDK för det här scenariot, genom vilket du enkelt kan skala U-SQL-körning och-test. Det är också möjligt att integrera U-SQL-testet med CI-systemet (kontinuerlig integrering) för att automatisera kompilering och testning.
Om du bryr dig om hur du manuellt lokalt kör och felsöker U-SQL-skript med GUI-verktyg kan du använda Azure Data Lake verktyg för Visual Studio. Du kan läsa mer här.
Installera Azure Data Lake U-SQL SDK
Du kan hämta Azure Data Lake U-SQL SDK här på NuGet.org. Och innan du använder det måste du kontrol lera att du har beroenden enligt följande.
Beroenden
Data Lake U-SQL SDK kräver följande beroenden:
Microsoft Visual C++ 14 och Windows SDK 10.0.10240.0 eller senare (som kallas CppSDK i den här artikeln). Det finns två sätt att hämta CppSDK:
Installera Visual Studio Community Edition. Du har en \Windows Kits\10-mapp under mappen program – till exempel C:\Program Files (x86) \Windows Kits\10. Du hittar också Windows 10 SDK-versionen under \Windows Kits\10\Lib. Om du inte ser dessa mappar måste du installera om Visual Studio och se till att välja Windows 10 SDK under installationen. Om du har installerat med Visual Studio hittar du den lokala U-SQL-kompilatorn automatiskt.

Installera data Lake verktyg för Visual Studio. Du hittar de förpaketerade Visual C++-och Windows SDK-filerna på
C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\ADL Tools\X.X.XXXX.X\CppSDK.I det här fallet kan inte den lokala U-SQL-kompileraren hitta beroenden automatiskt. Du måste ange sökvägen till CppSDK. Du kan antingen kopiera filerna till en annan plats eller använda den som den är.
Förstå grundläggande begrepp
Data rot
Mappen data-root är en "lokal lagring" för det lokala beräknings kontot. Det motsvarar Azure Data Lake Store kontot för ett Data Lake Analytics konto. Att växla till en annan data rot Katalog är precis som att växla till ett annat lagrings konto. Om du vill komma åt vanliga delade data med olika data rot kataloger måste du använda absoluta sökvägar i skripten. Du kan också skapa fil system symboliska länkar (till exempel MKLINK på NTFS) under mappen dataroot för att peka på delade data.
Mappen data-root används för att:
- Lagra lokala metadata, inklusive databaser, tabeller, tabell värdes funktioner (TVFs) och sammansättningar.
- Leta upp de indata och utdata som har definierats som relativa sökvägar i U-SQL. Genom att använda relativa sökvägar blir det enklare att distribuera dina U-SQL-projekt till Azure.
Fil Sök väg i U-SQL
Du kan använda både en relativ sökväg och en lokal absolut sökväg i U-SQL-skript. Den relativa sökvägen är relativ i förhållande till den angivna sökvägen för data rot katalogen. Vi rekommenderar att du använder "/" som Sök vägs avgränsare för att göra skripten kompatibla med Server sidan. Här följer några exempel på relativa sökvägar och deras motsvarande absoluta sökvägar. I de här exemplen är C:\LocalRunDataRoot mappen data-root.
| Relativ sökväg | Absolut sökväg |
|---|---|
| /ABC/DEF/input.csv | C:\LocalRunDataRoot\abc\def\input.csv |
| ABC/DEF/input.csv | C:\LocalRunDataRoot\abc\def\input.csv |
| D:/ABC/DEF/input.csv | D:\abc\def\input.csv |
Arbets katalog
När U-SQL-skriptet körs lokalt skapas en arbets katalog under kompileringen under aktuell katalog som körs. Förutom kompileringen av utdata, kommer de nödvändiga runtime-filerna för lokal körning att skugg kopie ras till den här arbets katalogen. Rotmappen för arbets katalogen heter "ScopeWorkDir" och filerna i arbets katalogen ser ut så här:
| Katalog/fil | Katalog/fil | Katalog/fil | Definition | Beskrivning |
|---|---|---|---|---|
| C6A101DDCB470506 | Hash-sträng för körnings version | Skugg kopia av runtime-filer som behövs för lokal körning | ||
| Script_66AE4909AA0ED06C | Skript namn + hash-sträng för skript Sök väg | Att kompilera utdata och loggning av körnings steg | ||
| _script _ . områdesgränsrouter | Kompilatorns utdata | Algebra-fil | ||
| _ScopeCodeGen _ . * | Kompilatorns utdata | Genererad hanterad kod | ||
| _ScopeCodeGenEngine _ . * | Kompilatorns utdata | Genererad ursprunglig kod | ||
| refererade sammansättningar | Sammansättnings referens | Refererade Assembly-filer | ||
| deployed_resources | Resurs distribution | Filer för resurs distribution | ||
| xxxxxxxx. xxx [1.. n] _ * . * | Körnings logg | Logg för körnings steg |
Använda SDK från kommando raden
Kommando rads gränssnitt för hjälp programmet
Under SDK-directory\build\runtime är LocalRunHelper.exe det kommando rads program som innehåller gränssnitt till de flesta av de vanligaste funktionerna för lokal körning. Observera att både kommandot och argument växlarna är Skift läges känsliga. Så här anropar du det:
LocalRunHelper.exe <command> <Required-Command-Arguments> [Optional-Command-Arguments]
Kör LocalRunHelper.exe utan argument eller med hjälp av hjälp växeln för att visa hjälp informationen:
> LocalRunHelper.exe help
Command 'help' : Show usage information
Command 'compile' : Compile the script
Required Arguments :
-Script param
Script File Path
Optional Arguments :
-Shallow [default value 'False']
Shallow compile
I hjälp informationen:
- Visar kommandots namn.
- Obligatoriskt argument visar argument som måste anges.
- Valfria argument visar argument som är valfria, med standardvärden. Valfria booleska argument har inte parametrar, och deras utseende innebär negativ till standardvärdet.
Retur värde och loggning
Hjälp programmet returnerar 0 för att lyckas och -1 för fel. Som standard skickar hjälparen alla meddelanden till den aktuella konsolen. De flesta kommandon stöder dock meddelandet-meddelande path_to_log_file valfritt argument som omdirigerar utdata till en loggfil.
Konfigurera miljö variabel
Lokal U-SQL-körning behöver en angiven data rot som ett lokalt lagrings konto, samt en angiven CppSDK-sökväg för beroenden. Du kan båda ange argumentet i kommando rads-eller ange en miljö variabel för dem.
Ange miljövariabeln SCOPE_CPP_SDK .
Om du får Microsoft Visual C++ och Windows SDK genom att installera Data Lake verktyg för Visual Studio, kontrollerar du att du har följande mapp:
C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\Microsoft Azure Data Lake Tools for Visual Studio 2015\X.X.XXXX.X\CppSDKDefiniera en ny miljö variabel som kallas SCOPE_CPP_SDK att peka på den här katalogen. Eller kopiera mappen till den andra platsen och ange SCOPE_CPP_SDK som.
Förutom att ställa in miljövariabeln kan du ange argumentet -CppSDK när du använder kommando raden. Med det här argumentet skrivs din standard miljö variabel över CppSDK.
Ange miljövariabeln LOCALRUN_DATAROOT .
Definiera en ny miljö variabel som kallas LOCALRUN_DATAROOT som pekar på data roten.
Förutom att ställa in miljövariabeln kan du ange argumentet -DataRoot med data rot Sök vägen när du använder en kommando rad. Det här argumentet skriver över din standard miljö variabel för data rot. Du måste lägga till det här argumentet till alla kommando rader som du kör så att du kan skriva över standard miljön för data rot miljön för alla åtgärder.
Exempel på kommando rads användning för SDK
Kompilera och köra
Kör -kommandot används för att kompilera skriptet och köra sedan kompilerade resultat. Dess kommando rads argument är en kombination av dem från att kompilera och köra.
LocalRunHelper run -Script path_to_usql_script.usql [optional_arguments]
Följande är valfria argument för körning:
| Argument | Standardvärde | Beskrivning |
|---|---|---|
| -CodeBehind | Falskt | Skriptet har. cs-kod bakom |
| -CppSDK | CppSDK-katalog | |
| – DataRoot | DataRoot miljö variabel | DataRoot för lokal körning, standard till miljövariabeln LOCALRUN_DATAROOT |
| – Meddelande | Dumpa meddelanden i konsolen till en fil | |
| – Parallell | 1 | Kör planen med den angivna parallellitet |
| -Referenser | Lista över sökvägar till extra referens sammansättningar eller datafiler med kod bakom, avgränsade med '; ' | |
| -UdoRedirect | Falskt | Generera Udo Assembly Redirect config |
| -UseDatabase | master | Databas som ska användas för kod bakom tillfällig sammansättnings registrering |
| – Utförlig | Falskt | Visa detaljerade utdata från körning |
| -WorkDir | Aktuell katalog | Katalog för användning och utdata av kompilerare |
| -RunScopeCEP | 0 | ScopeCEP-läge som ska användas |
| -ScopeCEPTempPath | temp | Temp-sökväg som ska användas för strömmande data |
| -OptFlags | Kommaavgränsad lista över optimerings flaggor |
Här är ett exempel:
LocalRunHelper run -Script d:\test\test1.usql -WorkDir d:\test\bin -CodeBehind -References "d:\asm\ref1.dll;d:\asm\ref2.dll" -UseDatabase testDB –Parallel 5 -Verbose
Förutom att kombinera kompilera och köra kan du kompilera och köra kompilerade körbara filer separat.
Kompilera ett U-SQL-skript
Compile -kommandot används för att kompilera ett U-SQL-skript till körbara filer.
LocalRunHelper compile -Script path_to_usql_script.usql [optional_arguments]
Följande är valfria argument för kompilering:
| Argument | Beskrivning |
|---|---|
| -CodeBehind [standardvärdet ' false '] | Skriptet har. cs-kod bakom |
| -CppSDK [standardvärde ' '] | CppSDK-katalog |
| -DataRoot [standardvärdet ' DataRoot Environment Variable '] | DataRoot för lokal körning, standard till miljövariabeln LOCALRUN_DATAROOT |
| -Meddelande [Standardvärde] | Dumpa meddelanden i konsolen till en fil |
| -Referenser [standardvärde ' '] | Lista över sökvägar till extra referens sammansättningar eller datafiler med kod bakom, avgränsade med '; ' |
| -Lite [standardvärde ' false '] | Ytlig kompilering |
| -UdoRedirect [standardvärdet ' false '] | Generera Udo Assembly Redirect config |
| -UseDatabase [standardvärde ' Master '] | Databas som ska användas för kod bakom tillfällig sammansättnings registrering |
| -WorkDir [standardvärde ' aktuell katalog '] | Katalog för användning och utdata av kompilerare |
| -RunScopeCEP [standardvärde ' 0 '] | ScopeCEP-läge som ska användas |
| -ScopeCEPTempPath [standardvärdet ' Temp '] | Temp-sökväg som ska användas för strömmande data |
| -OptFlags [standardvärde ' '] | Kommaavgränsad lista över optimerings flaggor |
Här följer några exempel på användning.
Kompilera ett U-SQL-skript:
LocalRunHelper compile -Script d:\test\test1.usql
Kompilera ett U-SQL-skript och ange mappen data rot. Observera att det här kommer att skriva över variabeln uppsättnings miljö.
LocalRunHelper compile -Script d:\test\test1.usql –DataRoot c:\DataRoot
Kompilera ett U-SQL-skript och ange en arbets katalog, referens sammansättning och databas:
LocalRunHelper compile -Script d:\test\test1.usql -WorkDir d:\test\bin -References "d:\asm\ref1.dll;d:\asm\ref2.dll" -UseDatabase testDB
Köra kompilerade resultat
Kommandot execute används för att köra kompilerade resultat.
LocalRunHelper execute -Algebra path_to_compiled_algebra_file [optional_arguments]
Följande är valfria argument för att köra:
| Argument | Standardvärde | Beskrivning |
|---|---|---|
| – DataRoot | '' | Data rot för metadata-körning. Den används som standard i LOCALRUN_DATAROOT -miljövariabeln. |
| – Meddelande | '' | Dumpa meddelanden i-konsolen till en fil. |
| – Parallell | 81.1 | Indikator för att köra de genererade lokala körnings stegen med den angivna parallell nivån. |
| – Utförlig | ! | Indikator för att visa detaljerade utdata från körnings miljön. |
Här är ett exempel på användning:
LocalRunHelper execute -Algebra d:\test\workdir\C6A101DDCB470506\Script_66AE4909AA0ED06C\__script__.abr –DataRoot c:\DataRoot –Parallel 5
Använda SDK med programmerings gränssnitt
Programmerings gränssnitten finns i LocalRunHelper.exe. Du kan använda dem för att integrera funktionerna i U-SQL SDK och C#-test ramverket för att skala ditt lokala U-SQL-skript. I den här artikeln ska jag använda standard C#-test projekt för att visa hur du använder dessa gränssnitt för att testa ditt U-SQL-skript.
Steg 1: skapa ett test projekt och konfiguration av C#-enhet
Skapa ett C#-test projekt via fil > nytt > projekt > Visual C# > test > unit test projekt.
Lägg till LocalRunHelper.exe som referens för projektet. LocalRunHelper.exe finns på \build\runtime\LocalRunHelper.exe i NuGet-paketet.

U-SQL SDK stöder bara x64-miljö, se till att ställa in build Platform Target som x64. Du kan ställa in detta genom projekt egenskap > bygga > plattforms mål.

Se till att ange din test miljö som x64. I Visual Studio kan du ställa in det genom test > test inställningar > standard processor arkitektur > x64.

Se till att kopiera alla beroende filer under NugetPackage\build\runtime\ till projekt arbets katalog, vanligt vis under ProjectFolder\bin\x64\Debug.
Steg 2: skapa ett U-SQL-skript test fall
Nedan visas exempel koden för U-SQL script-test. För testning måste du förbereda skript, indatafiler och förväntade filer.
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.IO;
using System.Text;
using System.Security.Cryptography;
using Microsoft.Analytics.LocalRun;
namespace UnitTestProject1
{
[TestClass]
public class USQLUnitTest
{
[TestMethod]
public void TestUSQLScript()
{
//Specify the local run message output path
StreamWriter MessageOutput = new StreamWriter("../../../log.txt");
LocalRunHelper localrun = new LocalRunHelper(MessageOutput);
//Configure the DateRoot path, Script Path and CPPSDK path
localrun.DataRoot = "../../../";
localrun.ScriptPath = "../../../Script/Script.usql";
localrun.CppSdkDir = "../../../CppSDK";
//Run U-SQL script
localrun.DoRun();
//Script output
string Result = Path.Combine(localrun.DataRoot, "Output/result.csv");
//Expected script output
string ExpectedResult = "../../../ExpectedOutput/result.csv";
Test.Helpers.FileAssert.AreEqual(Result, ExpectedResult);
//Don't forget to close MessageOutput to get logs into file
MessageOutput.Close();
}
}
}
namespace Test.Helpers
{
public static class FileAssert
{
static string GetFileHash(string filename)
{
Assert.IsTrue(File.Exists(filename));
using (var hash = new SHA1Managed())
{
var clearBytes = File.ReadAllBytes(filename);
var hashedBytes = hash.ComputeHash(clearBytes);
return ConvertBytesToHex(hashedBytes);
}
}
static string ConvertBytesToHex(byte[] bytes)
{
var sb = new StringBuilder();
for (var i = 0; i < bytes.Length; i++)
{
sb.Append(bytes[i].ToString("x"));
}
return sb.ToString();
}
public static void AreEqual(string filename1, string filename2)
{
string hash1 = GetFileHash(filename1);
string hash2 = GetFileHash(filename2);
Assert.AreEqual(hash1, hash2);
}
}
}
Programmerings gränssnitt i LocalRunHelper.exe
LocalRunHelper.exe tillhandahåller programmerings gränssnitt för lokal U-SQL-kompilering, körning osv. Gränssnitten visas på följande sätt.
Konstruktor
offentlig LocalRunHelper ([system. IO. TextWriter messageOutput = null])
| Parameter | Typ | Beskrivning |
|---|---|---|
| messageOutput | System. IO. TextWriter | för utgående meddelanden anger du null för att använda konsolen |
Egenskaper
| Egenskap | Typ | Beskrivning |
|---|---|---|
| AlgebraPath | sträng | Sökvägen till algebra-filen (algebra-filen är en av resultatet av kompileringen) |
| CodeBehindReferences | sträng | Om skriptet har ytterligare kod bakom referenser anger du Sök vägarna avgränsade med semikolon (;) |
| CppSdkDir | sträng | CppSDK-katalog |
| CurrentDir | sträng | Aktuell katalog |
| DataRoot | sträng | Sökväg för data rot |
| DebuggerMailPath | sträng | Sökvägen till fel söknings fack |
| GenerateUdoRedirect | boolesk | Om vi vill generera en åsidosättning av omdirigering av sammansättnings inläsning |
| HasCodeBehind | boolesk | Om skriptet har kod bakom |
| InputDir | sträng | Katalog för indata |
| MessagePath | sträng | Sökväg till meddelande dumpnings fil |
| OutputDir | sträng | Katalog för utdata |
| Parallellitet | int | Parallellitet för att köra algebra |
| ParentPid | int | PID för den överordnade tjänst övervakaren som ska avslutas, ange till 0 eller negativ för att ignorera |
| ResultPath | sträng | Sökväg till dump-fil |
| RuntimeDir | sträng | Körnings katalog |
| ScriptPath | sträng | Var du hittar skriptet |
| Grundbuffrade | boolesk | Ytlig kompilering eller inte |
| TempDir | sträng | Tillfällig katalog |
| UseDataBase | sträng | Ange databasen som ska användas för kod bakom tillfällig sammansättnings registrering, Master som standard |
| WorkDir | sträng | Prioriterad arbets katalog |
Metod
| Metod | Beskrivning | Returrelaterade | Parameter |
|---|---|---|---|
| offentlig bool-DoCompile () | Kompilera U-SQL-skriptet | Sant vid lyckad | |
| offentlig bool-DoExec () | Kör det kompilerade resultatet | Sant vid lyckad | |
| offentlig bool-DoRun () | Kör U-SQL-skriptet (kompilera och kör) | Sant vid lyckad | |
| offentlig bool-IsValidRuntimeDir (sträng väg) | Kontrol lera om den angivna sökvägen är giltig runtime-sökväg | Sant för giltig | Sökvägen till körnings katalogen |
Vanliga frågor och svar om vanliga problem
Fel 1
E_CSC_SYSTEM_INTERNAL: internt fel! Det gick inte att läsa in filen eller sammansättningen ScopeEngineManaged.dll eller ett av dess beroenden. Det gick inte att hitta den angivna modulen.
Kontrollera följande:
- Se till att du har x64-miljö. Versions mål plattformen och test miljön bör vara x64, se steg 1: skapa C#-enhets test projekt och konfiguration ovan.
- Se till att du har kopierat alla beroende filer under NugetPackage\build\runtime\ till projektets arbets katalog.
Nästa steg
- Information om U-SQL finns i Kom igång med U-SQL-språk i Azure Data Lake Analytics.
- Information om hur du loggar diagnostikinformation finns i komma åt diagnostikloggar för Azure Data Lake Analytics.
- Om du vill se en mer komplex fråga, se analysera webbplats loggar med Azure Data Lake Analytics.
- Om du vill visa jobb information, se Använd jobb webbläsare och jobb för Azure Data Lake Analytics jobb.
- Om du vill använda körnings vyn för hörn visas i Använd vyn hörn körning i data Lake verktyg för Visual Studio.