PowerShell gebruiken om een data factory-pijplijn te maken om gegevens in de cloud te kopiëren
Met dit PowerShell-voorbeeldscript maakt u een pijplijn in Azure Data Factory waarmee gegevens van de ene locatie naar een andere locatie in een Azure Blob Storage worden gekopieerd.
Notitie
Het wordt aanbevolen de Azure Az PowerShell-module te gebruiken om te communiceren met Azure. Zie Azure PowerShell installeren om aan de slag te gaan. Raadpleeg Azure PowerShell migreren van AzureRM naar Az om te leren hoe u naar de Azure PowerShell-module migreert.
Voor dit voorbeeld Azure PowerShell is vereist. Voer Get-Module -ListAvailable Az
uit om de versie te bekijken.
Als u PowerShell wilt installeren of upgraden, raadpleegt u De Azure PowerShell-module installeren.
Voer de cmdlet Connect-AzAccount uit om verbinding te maken met Azure.
Vereisten
- Azure Storage-account. U gebruikt de blob-opslag als de gegevensopslag voor de bron en de sink. Als u geen Azure Storage-account hebt, raadpleegt u het artikel Een opslagaccount maken om er een te maken.
- Maak een blob-container in Blob Storage, maak een invoermap in de container en upload een aantal bestanden naar de map. U kunt hulpprogramma's zoals Azure Storage Explorer gebruiken om verbinding te maken met Azure Blob Storage, een blob-container te maken, een invoerbestand te uploaden en het uitvoerbestand te verifiëren.
Voorbeeldscript
Belangrijk
Met dit script worden JSON-bestanden gemaakt waarmee Data Factory-entiteiten (gekoppelde service, gegevensset en pijplijn) op uw harde schijf in de map c:\ worden gedefinieerd.
# Set variables with your own values
$resourceGroupName = "<Azure resource group name>"
$dataFactoryName = "<Data factory name>" # must be globally unquie
$dataFactoryRegion = "East US"
$storageAccountName = "<Az.Storage account name>"
$storageAccountKey = "<Az.Storage account key>"
$sourceBlobPath = "<Azure blob container name>/<Azure blob input folder name>" # example: adftutorial/input
$sinkBlobPath = "<Azure blob container name>/<Azure blob output folder name>" # example: adftutorial/output
$pipelineName = "CopyPipeline"
# Create a resource group
New-AzResourceGroup -Name $resourceGroupName -Location $dataFactoryRegion
# Create a data factory
$df = Set-AzDataFactoryV2 -ResourceGroupName $resourceGroupName -Location $dataFactoryRegion -Name $dataFactoryName
# Create an Az.Storage linked service in the data factory
## JSON definition of the linked service.
$storageLinkedServiceDefinition = @"
{
"name": "AzureStorageLinkedService",
"properties": {
"type": "AzureStorage",
"typeProperties": {
"connectionString": {
"value": "DefaultEndpointsProtocol=https;AccountName=$storageAccountName;AccountKey=$storageAccountKey",
"type": "SecureString"
}
}
}
}
"@
## IMPORTANT: stores the JSON definition in a file that will be used by the Set-AzDataFactoryV2LinkedService command.
$storageLinkedServiceDefinition | Out-File ./StorageLinkedService.json
## Creates a linked service in the data factory
Set-AzDataFactoryV2LinkedService -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "AzureStorageLinkedService" -File ./StorageLinkedService.json
# Create an Azure Blob dataset in the data factory
## JSON definition of the dataset
$datasetDefiniton = @"
{
"name": "BlobDataset",
"properties": {
"type": "AzureBlob",
"typeProperties": {
"folderPath": {
"value": "@{dataset().path}",
"type": "Expression"
}
},
"linkedServiceName": {
"referenceName": "AzureStorageLinkedService",
"type": "LinkedServiceReference"
},
"parameters": {
"path": {
"type": "String"
}
}
}
}
"@
## IMPORTANT: store the JSON definition in a file that will be used by the Set-AzDataFactoryV2Dataset command.
$datasetDefiniton | Out-File ./BlobDataset.json
## Create a dataset in the data factory
Set-AzDataFactoryV2Dataset -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "BlobDataset" -File "./BlobDataset.json"
# Create a pipeline in the data factory
## JSON definition of the pipeline
$pipelineDefinition = @"
{
"name": "$pipelineName",
"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"
}
}
}
}
"@
## IMPORTANT: store the JSON definition in a file that will be used by the Set-AzDataFactoryV2Pipeline command.
$pipelineDefinition | Out-File ./CopyPipeline.json
## Create a pipeline in the data factory
Set-AzDataFactoryV2Pipeline -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name $pipelineName -File "./CopyPipeline.json"
# Create a pipeline run
## JSON definition for pipeline parameters
$pipelineParameters = @"
{
"inputPath": "$sourceBlobPath",
"outputPath": "$sinkBlobPath"
}
"@
## IMPORTANT: store the JSON definition in a file that will be used by the Invoke-AzDataFactoryV2Pipeline command.
$pipelineParameters | Out-File ./PipelineParameters.json
# Create a pipeline run by using parameters
$runId = Invoke-AzDataFactoryV2Pipeline -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -PipelineName $pipelineName -ParameterFile ./PipelineParameters.json
# Check the pipeline run status until it finishes the copy operation
while ($True) {
$result = Get-AzDataFactoryV2ActivityRun -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -PipelineRunId $runId -RunStartedAfter (Get-Date).AddMinutes(-30) -RunStartedBefore (Get-Date).AddMinutes(30)
if (($result | Where-Object { $_.Status -eq "InProgress" } | Measure-Object).count -ne 0) {
Write-Host "Pipeline run status: In Progress" -foregroundcolor "Yellow"
Start-Sleep -Seconds 30
}
else {
Write-Host "Pipeline '$pipelineName' run finished. Result:" -foregroundcolor "Yellow"
$result
break
}
}
# Get the activity run details
$result = Get-AzDataFactoryV2ActivityRun -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName `
-PipelineRunId $runId `
-RunStartedAfter (Get-Date).AddMinutes(-10) `
-RunStartedBefore (Get-Date).AddMinutes(10) `
-ErrorAction Stop
$result
if ($result.Status -eq "Succeeded") {`
$result.Output -join "`r`n"`
}`
else {`
$result.Error -join "`r`n"`
}
# To remove the data factory from the resource gorup
# Remove-AzDataFactoryV2 -Name $dataFactoryName -ResourceGroupName $resourceGroupName
#
# To remove the whole resource group
# Remove-AzResourceGroup -Name $resourceGroupName
Opschonen van implementatie
Nadat u het voorbeeldscript hebt uitgevoerd, kunt u de volgende opdracht gebruiken om de resourcegroep en alle bijbehorende resources te verwijderen:
Remove-AzResourceGroup -ResourceGroupName $resourceGroupName
Als u de data factory uit de resourcegroep wilt verwijderen, voert u de volgende opdracht uit:
Remove-AzDataFactoryV2 -Name $dataFactoryName -ResourceGroupName $resourceGroupName
Uitleg van het script
In dit script worden de volgende opdrachten gebruikt:
Opdracht | Opmerkingen |
---|---|
New-AzResourceGroup | Hiermee wordt een resourcegroep gemaakt waarin alle resources worden opgeslagen. |
Set-AzDataFactoryV2 | Een data factory maken. |
Set-AzDataFactoryV2LinkedService | Hiermee maakt u een gekoppelde service in de data factory. Een gekoppelde service koppelt een gegevensarchief of berekening aan een data factory. |
Set-AzDataFactoryV2Dataset | Hiermee maakt u een gegevensset in de data factory. Een gegevensset vertegenwoordigt invoer/uitvoer voor een activiteit in een pijplijn. |
Set-AzDataFactoryV2Pipeline | Hiermee maakt u een pijplijn in de data factory. Een pijplijn bevat een of meer activiteiten die een bepaalde bewerking uitvoeren. In deze pijplijn kopieert een kopieeractiviteit gegevens van de ene locatie naar een andere locatie in een Azure Blob Storage. |
Invoke-AzDataFactoryV2Pipeline | Hiermee maakt u een uitvoering voor de pijplijn. Met andere woorden, voert de pijplijn uit. |
Get-AzDataFactoryV2ActivityRun | Hiermee haalt u details op over de uitvoering van de activiteit (activiteitsuitvoering) in de pijplijn. |
Remove-AzResourceGroup | Hiermee verwijdert u een resourcegroep met inbegrip van alle ingesloten resources. |
Gerelateerde inhoud
Zie Documentatie over Azure PowerShell voor meer informatie over Azure PowerShell.
Aanvullende Voorbeelden van Azure Data Factory PowerShell-scripts vindt u in de Azure Data Factory PowerShell-voorbeelden.