Opzoekactiviteit in Azure Data Factory en Azure Synapse Analytics
VAN TOEPASSING OP: Azure Data Factory Azure Synapse Analytics
Tip
Probeer Data Factory uit in Microsoft Fabric, een alles-in-één analyseoplossing voor ondernemingen. Microsoft Fabric omvat alles, van gegevensverplaatsing tot gegevenswetenschap, realtime analyses, business intelligence en rapportage. Meer informatie over het gratis starten van een nieuwe proefversie .
Opzoekactiviteit kan een gegevensset ophalen uit een van de gegevensbronnen die worden ondersteund door data factory- en Synapse-pijplijnen. U kunt deze gebruiken om dynamisch te bepalen op welke objecten in een volgende activiteit moet worden uitgevoerd, in plaats van de objectnaam hard te coderen. Enkele objectvoorbeelden zijn bestanden en tabellen.
Opzoekactiviteit leest en retourneert de inhoud van een configuratiebestand of -tabel. Het retourneert ook het resultaat van het uitvoeren van een query of opgeslagen procedure. De uitvoer kan een singleton-waarde of een matrix van kenmerken zijn, die kunnen worden gebruikt in een volgende kopieer-, transformatie- of controlestroomactiviteiten zoals ForEach-activiteit.
Een opzoekactiviteit maken met de gebruikersinterface
Voer de volgende stappen uit om een opzoekactiviteit in een pijplijn te gebruiken:
Zoek naar Opzoeken in het deelvenster Pijplijnactiviteiten en sleep een opzoekactiviteit naar het pijplijncanvas.
Selecteer de nieuwe opzoekactiviteit op het canvas als deze nog niet is geselecteerd en het tabblad Instellingen om de details ervan te bewerken.
Kies een bestaande brongegevensset of selecteer de knop Nieuw om een nieuwe te maken.
De opties voor het identificeren van rijen die uit de brongegevensset moeten worden opgenomen, variëren op basis van het gegevenssettype. In het bovenstaande voorbeeld ziet u de configuratieopties voor een gegevensset met scheidingstekens. Hieronder ziet u voorbeelden van configuratieopties voor een Azure SQL-tabelgegevensset en een OData-gegevensset.
Ondersteunde mogelijkheden
Let op het volgende:
- De opzoekactiviteit kan maximaal 5000 rijen retourneren. Als de resultatenset meer records bevat, worden de eerste 5000 rijen geretourneerd.
- De uitvoer van de lookup-activiteit ondersteunt maximaal 4 MB . De activiteit mislukt als de grootte groter is dan de limiet.
- De langste duur voor lookup-activiteit voordat time-out plaatsvindt, is 24 uur.
Notitie
Wanneer u een query of opgeslagen procedure gebruikt om gegevens op te zoeken, moet u een en exact één resultatenset retourneren. Anders mislukt de lookup-activiteit.
De volgende gegevensbronnen worden ondersteund voor lookup-activiteit.
Notitie
Als er een connector is gemarkeerd als preview, kunt u deze uitproberen en ons naderhand feedback geven. Neem contact op met de ondersteuning van Azure als u een afhankelijkheid van preview-connectors wilt opnemen in uw oplossing.
Syntaxis
{
"name":"LookupActivity",
"type":"Lookup",
"typeProperties":{
"source":{
"type":"<source type>"
},
"dataset":{
"referenceName":"<source dataset name>",
"type":"DatasetReference"
},
"firstRowOnly":<true or false>
}
}
Typeeigenschappen
Name | Omschrijving | Type | Vereist? |
---|---|---|---|
gegevensset | Biedt de verwijzing naar de gegevensset voor de zoekactie. Details ophalen uit de sectie Eigenschappen van gegevensset in elk corresponderend connectorartikel. | Sleutel/waardepaar | Ja |
source | Bevat gegevenssetspecifieke broneigenschappen, hetzelfde als de bron van de kopieeractiviteit. Details ophalen uit de sectie Eigenschappen van kopieeractiviteit in elk bijbehorende connectorartikel. | Sleutel/waardepaar | Ja |
firstRowOnly | Geeft aan of alleen de eerste rij of alle rijen moeten worden geretourneerd. | Booleaanse waarde | Nee De standaardwaarde is true . |
Notitie
- Bronkolommen met het type ByteArray worden niet ondersteund.
- Structuur wordt niet ondersteund in gegevenssetdefinities. Voor tekstbestanden gebruikt u de veldnamenrij om de kolomnaam op te geven.
- Als uw opzoekbron een JSON-bestand is, wordt de
jsonPathDefinition
instelling voor het opnieuw vormgeven van het JSON-object niet ondersteund. De hele objecten worden opgehaald.
Het resultaat van de opzoekactiviteit gebruiken
Het opzoekresultaat wordt geretourneerd in de output
sectie van het resultaat van de activiteitsuitvoering.
Wanneer
firstRowOnly
deze is ingesteld optrue
(standaard), wordt de uitvoerindeling weergegeven in de volgende code. Het opzoekresultaat bevindt zich onder een vastefirstRow
sleutel. Als u het resultaat in de volgende activiteit wilt gebruiken, gebruikt u het patroon van@{activity('LookupActivity').output.firstRow.table}
.{ "firstRow": { "Id": "1", "schema":"dbo", "table":"Table1" } }
Wanneer
firstRowOnly
dit is ingesteldfalse
, is de uitvoerindeling zoals weergegeven in de volgende code. Eencount
veld geeft aan hoeveel records er worden geretourneerd. Gedetailleerde waarden worden weergegeven onder een vastevalue
matrix. In dat geval wordt de opzoekactiviteit gevolgd door een Foreach-activiteit. U geeft devalue
matrix door aan het forEach-activiteitsvelditems
met behulp van het patroon .@activity('MyLookupActivity').output.value
Gebruik de volgende syntaxis om toegang te krijgen tot elementen in devalue
matrix:@{activity('lookupActivity').output.value[zero based index].propertyname}
Een voorbeeld is@{activity('lookupActivity').output.value[0].schema}
.{ "count": "2", "value": [ { "Id": "1", "schema":"dbo", "table":"Table1" }, { "Id": "2", "schema":"dbo", "table":"Table2" } ] }
Opmerking
In dit voorbeeld bevat de pijplijn twee activiteiten: Opzoeken en kopiëren. De kopieeractiviteit kopieert gegevens uit een SQL-tabel in uw Azure SQL Database-exemplaar naar Azure Blob Storage. De naam van de SQL-tabel wordt opgeslagen in een JSON-bestand in Blob Storage. Met de opzoekactiviteit wordt de tabelnaam tijdens runtime opgezoekd. JSON wordt dynamisch gewijzigd met behulp van deze methode. U hoeft geen pijplijnen of gegevenssets opnieuw te implementeren.
In dit voorbeeld ziet u alleen de zoekfunctie voor de eerste rij. Zie de voorbeelden in Het bulksgewijs kopiëren van meerdere tabellen voor het zoeken naar alle rijen en om de resultaten te koppelen aan forEach-activiteit.
Pijplijn
- De lookup-activiteit is geconfigureerd voor het gebruik van LookupDataset, die verwijst naar een locatie in Azure Blob Storage. De opzoekactiviteit leest de naam van de SQL-tabel uit een JSON-bestand op deze locatie.
- De kopieeractiviteit maakt gebruik van de uitvoer van de opzoekactiviteit. Dit is de naam van de SQL-tabel. De eigenschap tableName in de SourceDataset is geconfigureerd voor het gebruik van de uitvoer van de opzoekactiviteit. Kopieeractiviteit kopieert gegevens uit de SQL-tabel naar een locatie in Azure Blob Storage. De locatie wordt opgegeven door de eigenschap SinkDataset .
{
"name": "LookupPipelineDemo",
"properties": {
"activities": [
{
"name": "LookupActivity",
"type": "Lookup",
"dependsOn": [],
"policy": {
"timeout": "7.00:00:00",
"retry": 0,
"retryIntervalInSeconds": 30,
"secureOutput": false,
"secureInput": false
},
"userProperties": [],
"typeProperties": {
"source": {
"type": "JsonSource",
"storeSettings": {
"type": "AzureBlobStorageReadSettings",
"recursive": true
},
"formatSettings": {
"type": "JsonReadSettings"
}
},
"dataset": {
"referenceName": "LookupDataset",
"type": "DatasetReference"
},
"firstRowOnly": true
}
},
{
"name": "CopyActivity",
"type": "Copy",
"dependsOn": [
{
"activity": "LookupActivity",
"dependencyConditions": [
"Succeeded"
]
}
],
"policy": {
"timeout": "7.00:00:00",
"retry": 0,
"retryIntervalInSeconds": 30,
"secureOutput": false,
"secureInput": false
},
"userProperties": [],
"typeProperties": {
"source": {
"type": "AzureSqlSource",
"sqlReaderQuery": {
"value": "select * from [@{activity('LookupActivity').output.firstRow.schema}].[@{activity('LookupActivity').output.firstRow.table}]",
"type": "Expression"
},
"queryTimeout": "02:00:00",
"partitionOption": "None"
},
"sink": {
"type": "DelimitedTextSink",
"storeSettings": {
"type": "AzureBlobStorageWriteSettings"
},
"formatSettings": {
"type": "DelimitedTextWriteSettings",
"quoteAllText": true,
"fileExtension": ".txt"
}
},
"enableStaging": false,
"translator": {
"type": "TabularTranslator",
"typeConversion": true,
"typeConversionSettings": {
"allowDataTruncation": true,
"treatBooleanAsNumber": false
}
}
},
"inputs": [
{
"referenceName": "SourceDataset",
"type": "DatasetReference",
"parameters": {
"schemaName": {
"value": "@activity('LookupActivity').output.firstRow.schema",
"type": "Expression"
},
"tableName": {
"value": "@activity('LookupActivity').output.firstRow.table",
"type": "Expression"
}
}
}
],
"outputs": [
{
"referenceName": "SinkDataset",
"type": "DatasetReference",
"parameters": {
"schema": {
"value": "@activity('LookupActivity').output.firstRow.schema",
"type": "Expression"
},
"table": {
"value": "@activity('LookupActivity').output.firstRow.table",
"type": "Expression"
}
}
}
]
}
],
"annotations": [],
"lastPublishTime": "2020-08-17T10:48:25Z"
}
}
Opzoekgegevensset
De opzoekgegevensset is het sourcetable.json bestand in de Azure Storage-zoekmap die is opgegeven door het type AzureBlobStorageLinkedService .
{
"name": "LookupDataset",
"properties": {
"linkedServiceName": {
"referenceName": "AzureBlobStorageLinkedService",
"type": "LinkedServiceReference"
},
"annotations": [],
"type": "Json",
"typeProperties": {
"location": {
"type": "AzureBlobStorageLocation",
"fileName": "sourcetable.json",
"container": "lookup"
}
}
}
}
Brongegevensset voor kopieeractiviteit
De brongegevensset maakt gebruik van de uitvoer van de opzoekactiviteit. Dit is de naam van de SQL-tabel. Kopieeractiviteit kopieert gegevens uit deze SQL-tabel naar een locatie in Azure Blob Storage. De locatie wordt opgegeven door de sinkgegevensset .
{
"name": "SourceDataset",
"properties": {
"linkedServiceName": {
"referenceName": "AzureSqlDatabase",
"type": "LinkedServiceReference"
},
"parameters": {
"schemaName": {
"type": "string"
},
"tableName": {
"type": "string"
}
},
"annotations": [],
"type": "AzureSqlTable",
"schema": [],
"typeProperties": {
"schema": {
"value": "@dataset().schemaName",
"type": "Expression"
},
"table": {
"value": "@dataset().tableName",
"type": "Expression"
}
}
}
}
Sink-gegevensset voor kopieeractiviteit
Kopieeractiviteit kopieert gegevens uit de SQL-tabel naar het filebylookup.csv-bestand in de CSV-map in Azure Storage. Het bestand wordt opgegeven door de eigenschap AzureBlobStorageLinkedService .
{
"name": "SinkDataset",
"properties": {
"linkedServiceName": {
"referenceName": "AzureBlobStorageLinkedService",
"type": "LinkedServiceReference"
},
"parameters": {
"schema": {
"type": "string"
},
"table": {
"type": "string"
}
},
"annotations": [],
"type": "DelimitedText",
"typeProperties": {
"location": {
"type": "AzureBlobStorageLocation",
"fileName": {
"value": "@{dataset().schema}_@{dataset().table}.csv",
"type": "Expression"
},
"container": "csv"
},
"columnDelimiter": ",",
"escapeChar": "\\",
"quoteChar": "\""
},
"schema": []
}
}
sourcetable.json
U kunt de volgende twee soorten indelingen gebruiken voor sourcetable.json bestand.
Set objecten
{
"Id":"1",
"schema":"dbo",
"table":"Table1"
}
{
"Id":"2",
"schema":"dbo",
"table":"Table2"
}
Matrix van objecten
[
{
"Id": "1",
"schema":"dbo",
"table":"Table1"
},
{
"Id": "2",
"schema":"dbo",
"table":"Table2"
}
]
Beperkingen en oplossingen
Hier volgen enkele beperkingen van de opzoekactiviteit en voorgestelde tijdelijke oplossingen.
Beperking | Tijdelijke oplossing |
---|---|
De opzoekactiviteit heeft maximaal 5000 rijen en een maximale grootte van 4 MB. | Ontwerp een pijplijn op twee niveaus waarbij de buitenste pijplijn wordt herhaald via een binnenste pijplijn, waarmee gegevens worden opgehaald die niet groter zijn dan de maximumrijen of grootte. |
Gerelateerde inhoud
Bekijk andere controlestroomactiviteiten die worden ondersteund door Azure Data Factory- en Synapse-pijplijnen: