Lookupaktivität in Azure Data Factory und Azure Synapse Analytics
GILT FÜR: Azure Data Factory Azure Synapse Analytics
Tipp
Testen Sie Data Factory in Microsoft Fabric, eine All-in-One-Analyselösung für Unternehmen. Microsoft Fabric deckt alle Aufgaben ab, von der Datenverschiebung bis hin zu Data Science, Echtzeitanalysen, Business Intelligence und Berichterstellung. Erfahren Sie, wie Sie kostenlos eine neue Testversion starten!
Die Lookupaktivität kann ein Dataset aus allen Datenquellen abrufen, die von Data Factory- und Synapse-Pipelines unterstützt werden. Sie können damit dynamisch ermitteln, welche Objekte in einer nachfolgenden Aktivität verarbeitet werden sollen, statt den Objektnamen hart zu codieren. Beispiele für Objekte sind Dateien und Tabellen.
Die Lookup-Aktivität liest die Daten und gibt den Inhalt einer Konfigurationsdatei oder Tabelle zurück. Zudem gibt sie auch das Ergebnis einer ausgeführten Abfrage oder gespeicherten Prozedur zurück. Die Ausgabe kann ein Singleton-Wert oder ein Array von Attributen sein, das in einer nachfolgenden Kopier-, Transformations-oder Ablaufsteuerungsaktivität wie einer ForEach-Aktivität verwendet werden kann.
Erstellen einer Lookup-Aktivität
Führen Sie die folgenden Schritte aus, um eine Lookup-Aktivität in einer Pipeline zu verwenden:
Suchen Sie im Bereich mit den Pipelineaktivitäten nach Spark, und ziehen Sie eine Lookup-Aktivität in den Pipelinebereich.
Wählen Sie in diesem Bereich die neue Lookup-Aktivität aus (wenn sie noch nicht ausgewählt wurde), und wählen Sie anschließend die Registerkarte Einstellungen aus, um die Details zu bearbeiten.
Wählen Sie ein vorhandenes Quelldataset aus, oder wählen Sie die Schaltfläche Neu aus, um ein neues zu erstellen.
Die Optionen zum Identifizieren von Zeilen, die aus dem Quelldataset eingeschlossen werden sollen, variieren je nach Datasettyp. Das obige Beispiel zeigt die Konfigurationsoptionen für ein durch Trennzeichen getrenntes Textdataset. Im Folgenden finden Sie Beispiele für Konfigurationsoptionen für ein Azure SQL-Tabellendataset und ein OData-Dataset.
Unterstützte Funktionen
Beachten Sie Folgendes:
- Die Lookup-Aktivität kann bis zu 5000 Zeilen zurückgeben. Wenn das Resultset mehr Datensätze enthält, werden die ersten 5000 Zeilen zurückgegeben.
- Die Ausgabe der Lookup-Aktivität unterstützt eine Größe von bis zu 4 MB. Wenn die Größe diesen Grenzwert überschreitet, schlägt die Aktivität fehl.
- Die Höchstdauer für die Lookup-Aktivität vor dem Timeout beträgt 24 Stunden.
Hinweis
Wenn Sie zum Suchen von Daten eine Abfrage oder gespeicherte Prozedur verwenden, müssen Sie sicherstellen, dass genau ein Resultset zurückgegeben wird. Andernfalls schlägt die Lookup-Aktivität fehl.
Die folgenden Datenquellen werden für die Lookup-Aktivität unterstützt.
Hinweis
Sie können jeden Connector, der als Vorschauversion markiert ist, ausprobieren und uns anschließend Feedback dazu senden. Wenden Sie sich an den Azure-Support, wenn Sie in Ihrer Lösung eine Abhängigkeit von Connectors verwenden möchten, die sich in der Vorschauphase befinden.
Syntax
{
"name":"LookupActivity",
"type":"Lookup",
"typeProperties":{
"source":{
"type":"<source type>"
},
"dataset":{
"referenceName":"<source dataset name>",
"type":"DatasetReference"
},
"firstRowOnly":<true or false>
}
}
Typeigenschaften
Name | Description | Typ | Erforderlich? |
---|---|---|---|
dataset | Enthält die Datasetreferenz für die Lookupaktivität. Details finden Sie in den entsprechenden Connectorartikeln im Abschnitt Dataset-Eigenschaften. | Schlüssel-Wert-Paar | Ja |
source | Enthält spezifische Quelleneigenschaften für das Dataset, identisch mit der Quelle der Kopieraktivität. Details finden Sie in jedem entsprechenden Connectorartikel im Abschnitt Eigenschaften der Kopieraktivität. | Schlüssel-Wert-Paar | Ja |
firstRowOnly | Gibt an, ob nur die erste Zeile oder alle Zeilen zurückgegeben werden sollen. | Boolean | Nein. Der Standardwert lautet true . |
Hinweis
- Quellspalten mit dem Typ ByteArray werden nicht unterstützt.
- In der Datasetdefinition wird keine Struktur unterstützt. Bei Textformatdateien geben Sie den Spaltennamen in der Kopfzeile an.
- Wenn es sich bei Ihrer Lookup-Quelle um eine JSON-Datei handelt, wird die
jsonPathDefinition
-Einstellung zur Neugestaltung des JSON-Objekts nicht unterstützt. Die gesamten Objekte werden abgerufen.
Verwenden des Ergebnisses der Lookup-Aktivität
Das Lookupergebnis wird im Abschnitt output
des Ergebnisses der Aktivitätsausführung zurückgegeben.
Wenn
firstRowOnly
auftrue
(Standardwert) gesetzt ist, wird das Ausgabeformat wie im folgenden Code gezeigt. Das Lookupergebnis befindet sich unter dem festen SchlüsselfirstRow
. Um das Ergebnis in nachfolgenden Aktivitäten zu nutzen, verwenden Sie das Muster@{activity('LookupActivity').output.firstRow.table}
.{ "firstRow": { "Id": "1", "schema":"dbo", "table":"Table1" } }
Wenn
firstRowOnly
auffalse
festgelegt ist, wird das Ausgabeformat wie im folgenden Code gezeigt. Ein Feldcount
gibt an, wie viele Datensätze zurückgegeben werden. Detaillierte Werte werden unter einem festenvalue
-Array angezeigt. In diesem Fall folgt auf die Lookup-Aktivität eine ForEach-Aktivität. Um das Arrayvalue
an das Felditems
der ForEach-Aktivität zu übergeben, verwenden Sie das Muster@activity('MyLookupActivity').output.value
. Für den Zugriff auf Elemente in Arrayvalue
verwenden Sie die folgende Syntax:@{activity('lookupActivity').output.value[zero based index].propertyname}
. z. B.@{activity('lookupActivity').output.value[0].schema}
.{ "count": "2", "value": [ { "Id": "1", "schema":"dbo", "table":"Table1" }, { "Id": "2", "schema":"dbo", "table":"Table2" } ] }
Beispiel
In diesem Beispiel enthält die Pipeline zwei Aktivitäten: Lookup und Kopieren. Mit der Kopieraktivität kopieren Sie Daten aus einer SQL-Tabelle in Ihrer Azure SQL-Datenbank-Instanz nach Azure Blob Storage. Der Name der SQL-Tabelle wird in einer JSON-Datei in Blob Storage gespeichert. Die Lookup-Aktivität sucht den Tabellennamen zur Runtime. Durch diesen Ansatz wird die JSON-Datei dynamisch geändert. Pipelines oder Datasets müssen nicht erneut bereitgestellt werden.
Dieses Beispiel zeigt nur das Lookup für die erste Zeile. Wenn Sie weitere Informationen zum Lookup für alle Zeilen und dem Verketten von Ergebnissen mit der ForEach-Aktivität benötigen, sehen Sie sich die Beispiele unter Massenkopieren mehrerer Tabellen mithilfe von Azure Data Factory und PowerShell an.
Pipeline
- Die Lookup-Aktivität ist für die Verwendung von LookupDataset konfiguriert, das auf einen Speicherort in Azure Blob Storage verweist. Der Name der SQL-Tabelle wird von der Lookup-Aktivität aus einer JSON-Datei an diesem Speicherort gelesen.
- Die Kopieraktivität verwendet die Ausgabe der Lookup-Aktivität, also den Namen der SQL-Tabelle. Die tableName-Eigenschaft in SourceDataset ist für die Verwendung der Ausgabe der Lookup-Aktivität konfiguriert. Die Kopieraktivität kopiert Daten aus der SQL-Tabelle an einen Speicherort in Azure Blob Storage. Der Speicherort wird durch die SinkDataset-Eigenschaft festgelegt.
{
"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"
}
}
Suchdataset
Das lookup-Dataset verweist auf die Datei sourcetable.json im Lookup-Ordner von Azure Storage, der durch den Typ AzureBlobStorageLinkedService angegeben wird.
{
"name": "LookupDataset",
"properties": {
"linkedServiceName": {
"referenceName": "AzureBlobStorageLinkedService",
"type": "LinkedServiceReference"
},
"annotations": [],
"type": "Json",
"typeProperties": {
"location": {
"type": "AzureBlobStorageLocation",
"fileName": "sourcetable.json",
"container": "lookup"
}
}
}
}
source-Dataset für die Kopieraktivität
Das source-Dataset verwendet die Ausgabe der Lookup-Aktivität, also den Namen der SQL-Tabelle. Die Kopieraktivität kopiert Daten aus dieser SQL-Tabelle an einen Speicherort in Azure Blob Storage. Der Speicherort wird durch das sink-Dataset festgelegt.
{
"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-Dataset für die Kopieraktivität
Die Kopieraktivität kopiert Daten aus der SQL-Tabelle in die Datei filebylookup.csv im Ordner csv in Azure Storage. Die Datei wird durch die Eigenschaft AzureBlobStorageLinkedServicefestgelegt.
{
"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
Sie können die folgenden zwei Arten von Formaten für die Datei sourcetable.json verwenden.
Satz von Objekten
{
"Id":"1",
"schema":"dbo",
"table":"Table1"
}
{
"Id":"2",
"schema":"dbo",
"table":"Table2"
}
Array von Objekten
[
{
"Id": "1",
"schema":"dbo",
"table":"Table1"
},
{
"Id": "2",
"schema":"dbo",
"table":"Table2"
}
]
Einschränkungen und Problemumgehungen
Hier werden einige Einschränkungen der Lookup-Aktivität und empfohlene Problemumgehungen aufgeführt.
Einschränkung | Problemumgehung |
---|---|
Die Grenze der Lookup-Aktivität liegt bei maximal 5.000 Zeilen und einer maximalen Größe von 4 MB. | Entwerfen Sie eine Pipeline mit zwei Ebenen, wobei die äußere Pipeline eine innere Pipeline durchläuft, die Daten abruft, die die maximale Zeilenanzahl oder Größe nicht überschreiten. |
Zugehöriger Inhalt
Dies sind weitere Ablaufsteuerungsaktivitäten, die von Azure Data Factory- und Synapse-Pipelines unterstützt werden: