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:

  1. Suchen Sie im Bereich mit den Pipelineaktivitäten nach Spark, und ziehen Sie eine Lookup-Aktivität in den Pipelinebereich.

  2. 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.

    Shows the UI for a Lookup activity.

  3. Wählen Sie ein vorhandenes Quelldataset aus, oder wählen Sie die Schaltfläche Neu aus, um ein neues zu erstellen.

  4. 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.

    Shows the configuration options in the Lookup activity for an Azure SQL table dataset.

    Shows the configuration options in the Lookup activity for an 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.

Category Datenspeicher
Azure Azure Blob Storage
  Azure Cosmos DB for NoSQL
  Azure Data Explorer (Kusto)
  Azure Data Lake Storage Gen1
  Azure Data Lake Storage Gen2
  Azure Database for MariaDB
  Azure Database for MySQL
  Azure-Datenbank für PostgreSQL
  Azure Databricks Delta Lake
  Azure Files
  Azure SQL-Datenbank
  Verwaltete Azure SQL-Datenbank-Instanz
  Azure Synapse Analytics
  Azure Table Storage
Datenbank Amazon RDS für Oracle
  Amazon RDS für SQL Server
  Amazon Redshift
  Apache Impala
  Verwaltete Azure SQL-Datenbank-Instanz
  DB2
  Drill
  Google AdWords
  Google BigQuery
  Greenplum
  HBase
  Hive
  Informix
  MariaDB
  Microsoft Access
  MySQL
  Netezza
  Oracle
  Phoenix
  PostgreSQL
  Presto
  SAP Business Warehouse Open Hub
  SAP Business Warehouse über MDX
  SAP HANA
  SAP-Tabelle
  SQL Server
  Spark
  Sybase
  Teradata
  Vertica
NoSQL Cassandra
  Couchbase (Vorschauversion)
File Amazon S3
  Amazon S3 Compatible Storage
  Dateisystem
  FTP
  Google Cloud Storage
  HDFS
  Generisches HTTP
  Microsoft Fabric Lakehouse
  Oracle Cloud Storage
  SFTP
Generisches Protokoll Generisches OData
  Generische ODBC
  SharePoint Online-Liste
Dienste und Apps Amazon Marketplace Web Service
  Concur (Vorschauversion)
  Dataverse
  Dynamics 365
  Azure IoT Hub
  Dynamics CRM
  HubSpot
  Jira
  Azure Data Explorer (Kusto)
  Magento (Vorschauversion)
  Marketo (Vorschauversion)
  Oracle Eloqua (Vorschauversion)
  Oracle Responsys (Vorschauversion)
  Oracle Service Cloud (Vorschau)
  PayPal (Vorschauversion)
  QuickBooks (Vorschauversion)
  SAP Cloud for Customer (C4C)
  SAP ECC
  Salesforce
  Salesforce Marketing Cloud
  Salesforce Service Cloud
  ServiceNow
  Shopify (V)
  Snowflake
  Square (Vorschauversion)
  Webtabelle (HTML-Tabelle)
  Xero
  Zoho (Vorschauversion)

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 auf true (Standardwert) gesetzt ist, wird das Ausgabeformat wie im folgenden Code gezeigt. Das Lookupergebnis befindet sich unter dem festen Schlüssel firstRow. 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 auf false festgelegt ist, wird das Ausgabeformat wie im folgenden Code gezeigt. Ein Feld count gibt an, wie viele Datensätze zurückgegeben werden. Detaillierte Werte werden unter einem festen value-Array angezeigt. In diesem Fall folgt auf die Lookup-Aktivität eine ForEach-Aktivität. Um das Array value an das Feld items der ForEach-Aktivität zu übergeben, verwenden Sie das Muster @activity('MyLookupActivity').output.value. Für den Zugriff auf Elemente in Array value 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.

Dies sind weitere Ablaufsteuerungsaktivitäten, die von Azure Data Factory- und Synapse-Pipelines unterstützt werden: