Använda parametrar, uttryck och funktioner i Azure Data Factory

GÄLLER FÖR: Azure Data Factory Azure Synapse Analytics

Dricks

Prova Data Factory i Microsoft Fabric, en allt-i-ett-analyslösning för företag. Microsoft Fabric omfattar allt från dataflytt till datavetenskap, realtidsanalys, business intelligence och rapportering. Lär dig hur du startar en ny utvärderingsversion kostnadsfritt!

I det här dokumentet fokuserar vi främst på att lära oss grundläggande begrepp med olika exempel för att utforska möjligheten att skapa parametriserade datapipelines i Azure Data Factory. Parameterisering och dynamiska uttryck är sådana viktiga tillägg till ADF eftersom de kan spara mycket tid och möjliggöra en mycket mer flexibel lösning för extrahering, transformering, belastning (ETL) eller extrahering, belastning, transformering (ELT), vilket avsevärt minskar kostnaden för lösningsunderhåll och påskyndar implementeringen av nya funktioner i befintliga pipelines. Dessa vinster beror på att parameterisering minimerar mängden hård kodning och ökar antalet återanvändbara objekt och processer i en lösning.

Användargränssnitt och parametrar för Azure Data Factory

Om du inte har använt Azure Data Factory-parametern tidigare i ADF-användargränssnittet kan du läsa Data Factory-användargränssnittet för länkade tjänster med parametrar och Data Factory-användargränssnittet för metadatadriven pipeline med parametrar för en visuell förklaring.

Parameter- och uttrycksbegrepp

Du kan använda parametrar för att skicka externa värden till pipelines, datauppsättningar, länkade tjänster och dataflöden. När parametern har skickats till resursen kan den inte ändras. Genom att parametrisera resurser kan du återanvända dem med olika värden varje gång. Parametrar kan användas individuellt eller som en del av uttryck. JSON-värden i definitionen kan vara literala eller uttryck som utvärderas vid körning.

Till exempel:

"name": "value"

eller

"name": "@pipeline().parameters.password"

Uttryck kan visas var som helst i ett JSON-strängvärde och alltid resultera i ett annat JSON-värde. Här är lösenordet en pipelineparameter i uttrycket. Om ett JSON-värde är ett uttryck extraheras uttryckets brödtext genom att ta bort at-sign (@). Om en literalsträng behövs som börjar med @måste den vara undantagen med hjälp av @@. I följande exempel visas hur uttryck utvärderas.

JSON-värde Resultat
"parametrar" Tecknen "parameters" returneras.
"parameters[1]" Tecknen "parameters[1]" returneras.
"@@" En sträng med 1 tecken som innehåller @returneras.
" @" En sträng med två tecken som innehåller @returneras.

Uttryck kan också visas inuti strängar med hjälp av en funktion som kallas stränginterpolation där uttryck omsluts i @{ ... }. Till exempel: "name" : "First Name: @{pipeline().parameters.firstName} Last Name: @{pipeline().parameters.lastName}"

Med stränginterpolation är resultatet alltid en sträng. Säg att jag har definierat myNumber som 42 och myString som foo:

JSON-värde Resultat
"@pipeline().parameters.myString" Returnerar foo som en sträng.
"@{pipeline().parameters.myString}" Returnerar foo som en sträng.
"@pipeline().parameters.myNumber" Returnerar 42 som ett tal.
"@{pipeline().parameters.myNumber}" Returnerar 42 som en sträng.
"Svaret är: @{pipeline().parameters.myNumber}" Returnerar strängen Answer is: 42.
"@concat('Answer is: ', string(pipeline().parameters.myNumber))" Returnerar strängen Answer is: 42
"Svaret är: @@{pipeline().parameters.myNumber}" Returnerar strängen Answer is: @{pipeline().parameters.myNumber}.

Exempel på hur du använder parametrar i uttryck

Exempel på komplext uttryck

Exemplet nedan visar ett komplext exempel som refererar till ett djupt underfält med aktivitetsutdata. Om du vill referera till en pipelineparameter som utvärderas till ett underfält använder du [] syntax i stället för punktoperator (.) (som vid underfält1 och underfält2)

@activity('*activityName*').output.*subfield1*.*subfield2*[pipeline().parameters.*subfield3*].*subfield4*

Redigerare för dynamiskt innehåll

Redigeraren för dynamiskt innehåll undflyr automatiskt tecken i ditt innehåll när du är klar med redigeringen. Följande innehåll i innehållsredigeraren är till exempel en stränginterpolation med två uttrycksfunktioner.

{ 
  "type": "@{if(equals(1, 2), 'Blob', 'Table' )}",
  "name": "@{toUpper('myData')}"
}

Redigeraren för dynamiskt innehåll konverterar innehållet till uttrycket "{ \n \"type\": \"@{if(equals(1, 2), 'Blob', 'Table' )}\",\n \"name\": \"@{toUpper('myData')}\"\n}". Resultatet av det här uttrycket är en JSON-formatsträng som visas nedan.

{
  "type": "Table",
  "name": "MYDATA"
}

En datauppsättning med parametrar

I följande exempel tar BlobDataset en parameter med namnet path. Dess värde används för att ange ett värde för egenskapen folderPath med uttrycket : dataset().path.

{
    "name": "BlobDataset",
    "properties": {
        "type": "AzureBlob",
        "typeProperties": {
            "folderPath": "@dataset().path"
        },
        "linkedServiceName": {
            "referenceName": "AzureStorageLinkedService",
            "type": "LinkedServiceReference"
        },
        "parameters": {
            "path": {
                "type": "String"
            }
        }
    }
}

En pipeline med parametrar

I följande exempel tar pipelinen inputPath - och outputPath-parametrar . Sökvägen för den parametriserade blobdatauppsättningen anges med hjälp av värdena för dessa parametrar. Syntaxen som används här är: pipeline().parameters.parametername.

{
    "name": "Adfv2QuickStartPipeline",
    "properties": {
        "activities": [
            {
                "name": "CopyFromBlobToBlob",
                "type": "Copy",
                "inputs": [
                    {
                        "referenceName": "BlobDataset",
                        "parameters": {
                            "path": "@pipeline().parameters.inputPath"
                        },
                        "type": "DatasetReference"
                    }
                ],
                "outputs": [
                    {
                        "referenceName": "BlobDataset",
                        "parameters": {
                            "path": "@pipeline().parameters.outputPath"
                        },
                        "type": "DatasetReference"
                    }
                ],
                "typeProperties": {
                    "source": {
                        "type": "BlobSource"
                    },
                    "sink": {
                        "type": "BlobSink"
                    }
                }
            }
        ],
        "parameters": {
            "inputPath": {
                "type": "String"
            },
            "outputPath": {
                "type": "String"
            }
        }
    }
}

Anropa funktioner i uttryck

Du kan anropa funktioner i uttryck. Följande avsnitt innehåller information om de funktioner som kan användas i ett uttryck.

Strängfunktioner

Om du vill arbeta med strängar kan du använda dessa strängfunktioner och även vissa samlingsfunktioner. Strängfunktioner fungerar endast på strängar.

Strängfunktion Uppgift
Concat Kombinera två eller flera strängar och returnera den kombinerade strängen.
endsWith Kontrollera om en sträng slutar med den angivna delsträngen.
Guid Generera en globalt unik identifierare (GUID) som en sträng.
indexOf Returnera startpositionen för en delsträng.
lastIndexOf Returnera startpositionen för den sista förekomsten av en delsträng.
ersätt Ersätt en delsträng med den angivna strängen och returnera den uppdaterade strängen.
dela Returnera en matris som innehåller delsträngar, avgränsade med kommatecken, från en större sträng baserat på ett angivet avgränsartecken i den ursprungliga strängen.
startsWith Kontrollera om en sträng börjar med en specifik delsträng.
Delsträng Returnera tecken från en sträng med början från den angivna positionen.
toLower Returnera en sträng i gemener.
toUpper Returnera en sträng i versaler.
Trimma Ta bort inledande och avslutande blanksteg från en sträng och returnera den uppdaterade strängen.

Insamlingsfunktioner

Om du vill arbeta med samlingar, vanligtvis matriser, strängar och ibland ordlistor, kan du använda dessa samlingsfunktioner.

Samlingsfunktion Uppgift
Innehåller Kontrollera om en samling har ett specifikt objekt.
empty Kontrollera om en samling är tom.
Första Returnera det första objektet från en samling.
Korsningen Returnera en samling som bara har de vanliga objekten i de angivna samlingarna.
join Returnera en sträng som innehåller alla objekt från en matris, avgränsad med det angivna tecknet.
Senaste Returnera det sista objektet från en samling.
length Returnera antalet objekt i en sträng eller matris.
Hoppa över Ta bort objekt från framsidan av en samling och returnera alla andra objekt.
Ta Returnera objekt från framsidan av en samling.
Unionen Returnera en samling som innehåller alla objekt från de angivna samlingarna.

Logiska funktioner

Dessa funktioner är användbara inuti villkor, de kan användas för att utvärdera alla typer av logik.

Logisk jämförelsefunktion Uppgift
and Kontrollera om alla uttryck är sanna.
Motsvarar Kontrollera om båda värdena är likvärdiga.
greater Kontrollera om det första värdet är större än det andra värdet.
greaterOrEquals Kontrollera om det första värdet är större än eller lika med det andra värdet.
Om Kontrollera om ett uttryck är sant eller falskt. Baserat på resultatet returnerar du ett angivet värde.
less Kontrollera om det första värdet är mindre än det andra värdet.
lessOrEquals Kontrollera om det första värdet är mindre än eller lika med det andra värdet.
Inte Kontrollera om ett uttryck är falskt.
or Kontrollera om minst ett uttryck är sant.

Konverteringsfunktioner

Dessa funktioner används för att konvertera mellan var och en av de inbyggda typerna på språket:

  • sträng
  • integer
  • flyttal
  • boolean
  • Matriser
  • Ordböcker
Konverteringsfunktion Uppgift
Array Returnera en matris från en enda angiven indata. Flera indata finns i createArray.
base64 Returnera den base64-kodade versionen för en sträng.
base64ToBinary Returnera den binära versionen för en base64-kodad sträng.
base64ToString Returnera strängversionen för en base64-kodad sträng.
Binära Returnera den binära versionen för ett indatavärde.
Bool Returnera den booleska versionen för ett indatavärde.
sammanstärning Returnera det första värdet som inte är null från en eller flera parametrar.
createArray Returnera en matris från flera indata.
dataUri Returnera data-URI:n för ett indatavärde.
dataUriToBinary Returnera den binära versionen för en data-URI.
dataUriToString Returnera strängversionen för en data-URI.
avkodaBase64 Returnera strängversionen för en base64-kodad sträng.
decodeDataUri Returnera den binära versionen för en data-URI.
decodeUriComponent Returnera en sträng som ersätter escape-tecken med avkodade versioner.
encodeUriComponent Returnera en sträng som ersätter URL-osäkra tecken med escape-tecken.
Flyta Returnera ett flyttalsnummer för ett indatavärde.
Int Returnera heltalsversionen för en sträng.
Json Returnera JSON-typvärdet (JavaScript Object Notation) för en sträng eller XML.
Sträng Returnera strängversionen för ett indatavärde.
uriComponent Returnera den URI-kodade versionen för ett indatavärde genom att ersätta URL-osäkra tecken med escape-tecken.
uriComponentToBinary Returnera den binära versionen för en URI-kodad sträng.
uriComponentToString Returnera strängversionen för en URI-kodad sträng.
xml Returnera XML-versionen för en sträng.
Xpath Kontrollera XML för noder eller värden som matchar ett XPath-uttryck (XML Path Language) och returnera matchande noder eller värden.

Matematikfunktioner

Dessa funktioner kan användas för båda typerna av tal: heltal och flyttal.

Matematisk funktion Uppgift
Add Returnera resultatet från att lägga till två tal.
Div Returnera resultatet från att dela upp två tal.
Max Returnera det högsta värdet från en uppsättning tal eller en matris.
Min Returnera det lägsta värdet från en uppsättning tal eller en matris.
Mod Returnera resten från att dela upp två tal.
mul Returnera produkten från att multiplicera två tal.
Rand Returnera ett slumpmässigt heltal från ett angivet intervall.
intervall Returnera en heltalsmatris som startar från ett angivet heltal.
Sub Returnera resultatet från att subtrahera det andra talet från det första talet.

Datumfunktioner

Datum- eller tidsfunktion Uppgift
addDays Lägg till ett antal dagar i en tidsstämpel.
addHours Lägg till ett antal timmar i en tidsstämpel.
addMinutes Lägg till ett antal minuter i en tidsstämpel.
addSeconds Lägg till ett antal sekunder i en tidsstämpel.
addToTime Lägg till ett antal tidsenheter i en tidsstämpel. Se även getFutureTime.
convertFromUtc Konvertera en tidsstämpel från Universal Time Coordinated (UTC) till måltidszonen.
convertTimeZone Konvertera en tidsstämpel från källtidszonen till måltidszonen.
convertToUtc Konvertera en tidsstämpel från källtidszonen till Universal Time Coordinated (UTC).
dayOfMonth Returnera månadskomponenten från en tidsstämpel.
dayOfWeek Returnera veckodag-komponenten från en tidsstämpel.
dayOfYear Returnera årskomponentens dag från en tidsstämpel.
formatDateTime Returnera tidsstämpeln som en sträng i valfritt format.
getFutureTime Returnera den aktuella tidsstämpeln plus de angivna tidsenheterna. Se även addToTime.
getPastTime Returnera den aktuella tidsstämpeln minus de angivna tidsenheterna. Se även subtractFromTime.
startOfDay Returnera dagens start för en tidsstämpel.
startOfHour Returnera timmens start för en tidsstämpel.
startOfMonth Returnera början av månaden för en tidsstämpel.
subtractFromTime Subtrahera ett antal tidsenheter från en tidsstämpel. Se även getPastTime.
Fästingar Returnera egenskapsvärdet ticks för en angiven tidsstämpel.
utcNow Returnera den aktuella tidsstämpeln som en sträng.

Detaljerade exempel för övning

Detaljerad Azure Data Factory-kopieringspipeline med parametrar

Den här azure Data Factory-pipelineparametern som skickar självstudiekursen beskriver hur du skickar parametrar mellan en pipeline och aktivitet samt mellan aktiviteterna.

Detaljerad pipeline för dataflödesmappning med parametrar

Följ Mappa dataflöde med parametrar för omfattande exempel på hur du använder parametrar i dataflödet.

Detaljerad metadatadriven pipeline med parametrar

Följ metadatadriven pipeline med parametrar för att lära dig mer om hur du använder parametrar för att utforma metadatadrivna pipelines. Detta är ett populärt användningsfall för parametrar.

En lista över systemvariabler som du kan använda i uttryck finns i Systemvariabler.