Activité de recherche dans Azure Data Factory et Azure Synapse Analytics

S’APPLIQUE À : Azure Data Factory Azure Synapse Analytics

Conseil

Essayez Data Factory dans Microsoft Fabric, une solution d’analyse tout-en-un pour les entreprises. Microsoft Fabric couvre tous les aspects, du déplacement des données à la science des données, en passant par l’analyse en temps réel, l’aide à la décision et la création de rapports. Découvrez comment démarrer un nouvel essai gratuitement !

L’activité de recherche peut récupérer un jeu de données à partir de n’importe quelle source de données prise en charge par les pipelines Data Factory et Synapse. Vous pouvez l’utiliser pour déterminer de manière dynamique sur quels objets intervenir dans une activité ultérieure, au lieu de coder en dur le nom d’objet. Les fichiers et les tables constituent quelques exemples d’objet.

L’activité Lookup lit et retourne le contenu d’une table ou d’un fichier de configuration. Elle retourne également le résultat de l’exécution d’une requête ou d’une procédure stockée. La sortie peut être une valeur singleton ou un tableau d’attributs, qui peut être consommé dans des activités ultérieures de copie, de transformation ou de flux de contrôle comme l’activité ForEach.

Créer une activité Lookup avec l’IU

Pour utiliser une activité Lookup dans un pipeline, effectuez les étapes suivantes :

  1. Recherchez Lookup dans le volet Activités du pipeline, puis faites glisser une activité Lookup vers le canevas du pipeline.

  2. Sélectionnez la nouvelle activité Lookup dans le canevas (si elle n’est pas déjà sélectionnée) ainsi que son onglet Paramètres pour modifier ses détails.

    Shows the UI for a Lookup activity.

  3. Choisissez un jeu de données source existant, ou sélectionnez le bouton Nouveau pour en créer un.

  4. Les options permettant d’identifier les lignes à inclure à partir du jeu de données source varient en fonction du type de jeu de données. L’exemple ci-dessus montre les options de configuration d’un jeu de données de type texte délimité. Vous trouverez ci-dessous des exemples d’options de configuration pour un jeu de données de table Azure SQL et un jeu de données OData.

    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.

Fonctionnalités prises en charge

Notez les points suivants :

  • L’activité de recherche peut retourner jusqu’à 5 000 lignes ; si le jeu de résultats contient plus d’enregistrements, les 5 000 premières lignes sont retournées.
  • La sortie de l’activité de recherche prend en charge une taille jusqu’à 4 Mo ; l’activité échoue si la taille dépasse cette limite.
  • La durée la plus longue pour l’activité de recherche avant l’expiration du délai d’attente est de 24 heures.

Notes

Lorsque vous utilisez une requête ou une procédure stockée pour rechercher des données, veillez à retourner un jeu de résultats unique et exact. Dans le cas contraire, l’activité de recherche échoue.

Les sources de données suivantes sont prises en charge pour l’activité Lookup.

Category Banque de données
Microsoft Azure stockage d’objets blob Azure
  Azure Cosmos DB pour NoSQL
  Azure Data Explorer (Kusto)
  Azure Data Lake Storage Gen1
  Azure Data Lake Storage Gen2
  Azure Database for MariaDB
  Azure Database pour MySQL
  Base de données Azure pour PostgreSQL
  Azure Databricks Delta Lake
  Azure Files
  Azure SQL Database
  Azure SQL Managed Instance
  Azure Synapse Analytics
  Stockage Table Azure
Sauvegarde de la base de données Amazon RDS pour Oracle
  Amazon RDS pour SQL Server
  Amazon Redshift
  Apache Impala
  Azure SQL Managed Instance
  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 via MDX
  SAP HANA
  SAP Table
  SQL Server
  Spark
  Sybase
  Teradata
  Vertica
NoSQL Cassandra
  Couchbase (préversion)
File Amazon S3
  Stockage compatible Amazon S3
  Système de fichiers
  FTP
  Google Cloud Storage
  HDFS
  HTTP générique
  Microsoft Fabric Lakehouse
  Oracle Cloud Storage
  SFTP
Protocole générique OData générique
  ODBC générique
  Liste SharePoint Online
Services et applications Service web Amazon Marketplace
  Concur (préversion)
  Dataverse
  Dynamics 365
  Dynamics AX
  Dynamics CRM
  HubSpot
  Jira
  Azure Data Explorer (Kusto)
  Magento (préversion)
  Marketo (préversion)
  Oracle Eloqua (préversion)
  Oracle Responsys (préversion)
  Oracle Service Cloud (préversion)
  PayPal (préversion)
  QuickBooks (préversion)
  SAP Cloud for Customer (C4C)
  SAP ECC
  Salesforce
  Salesforce Marketing Cloud
  Salesforce Service Cloud
  ServiceNow
  Shopify (préversion)
  Snowflake
  Square (préversion)
  Table web (table HTML)
  Xero
  Zoho (préversion)

Notes

Vous pouvez essayer tous les connecteurs marqués comme étant en préversion et nous faire part de vos commentaires. Si vous souhaitez établir une dépendance sur les connecteurs en préversion dans votre solution, veuillez contacter le support Azure.

Syntaxe

{
    "name":"LookupActivity",
    "type":"Lookup",
    "typeProperties":{
        "source":{
            "type":"<source type>"
        },
        "dataset":{
            "referenceName":"<source dataset name>",
            "type":"DatasetReference"
        },
        "firstRowOnly":<true or false>
    }
}

Propriétés type

Nom Description Type Requis ?
dataset Fournit la référence de jeu de données pour la recherche. Pour plus d’informations, voir la section Propriétés du jeu de données dans chaque article traitant du connecteur correspondant. Paire clé/valeur Oui
source Contient des propriétés sources spécifiques au jeu de données, identiques à la source de l’activité Copy. Pour plus d’informations, consultez la section Propriétés de l’activité Copy dans chaque article traitant du connecteur correspondant. Paire clé/valeur Oui
firstRowOnly Indique s’il faut retourner uniquement la première ligne ou toutes les lignes. Boolean Non. Par défaut, il s’agit de true.

Notes

  • Les colonnes sources avec le type ByteArray ne sont pas prises en charge.
  • Il n’y a pas de prise en charge pour Structure dans les définitions des jeux de données. Pour les fichiers de format texte, utilisez la ligne d’en-tête pour mentionner le nom de la colonne.
  • Si votre source de recherche est un fichier JSON, le paramètre jsonPathDefinition pour la mise en forme de l’objet JSON n’est pas pris en charge. Les objets entiers sont récupérés.

Utiliser le résultat de l’activité de recherche

Le résultat de la recherche est retourné dans la section output du résultat de l’exécution d’activité.

  • Quand firstRowOnly a la valeur true (par défaut) , le format de la sortie se présente comme dans le code suivant. Le résultat de la recherche se trouve dans une clé firstRow fixe. Pour utiliser le résultat dans une activité suivante, utilisez le modèle @{activity('LookupActivity').output.firstRow.table}.

    {
        "firstRow":
        {
            "Id": "1",
            "schema":"dbo",
            "table":"Table1"
        }
    }
    
  • Quand firstRowOnly a la valeur false , le format de la sortie se présente comme dans le code suivant. Un champ count indique le nombre d’enregistrements qui sont retournés. Les valeurs détaillées sont affichées sous un tableau value fixe. Dans ce cas, l’activité Lookup est suivie d’une activité Foreach. Vous passez le tableau value au champ items de l’activité ForEach en utilisant le modèle @activity('MyLookupActivity').output.value. Pour accéder aux éléments du tableau value, utilisez la syntaxe suivante : @{activity('lookupActivity').output.value[zero based index].propertyname}. par exemple @{activity('lookupActivity').output.value[0].schema}.

    {
        "count": "2",
        "value": [
            {
                "Id": "1",
                "schema":"dbo",
                "table":"Table1"
            },
            {
                "Id": "2",
                "schema":"dbo",
                "table":"Table2"
            }
        ]
    } 
    

Exemple

Dans cet exemple, le pipeline comprend deux activités : Lookup et Copy. L’activité Copy copie les données d’une table SQL de votre instance Azure SQL Database dans le stockage Blob Azure. Le nom de la table SQL est stocké dans un fichier JSON dans le stockage Blob. L’activité Lookup recherche le nom de la table lors de l’exécution. Le fichier JSON est modifié de manière dynamique avec cette approche. Vous n’avez pas besoin de redéployer les pipelines ou les jeux de données.

Cet exemple illustre une recherche pour la première ligne uniquement. Pour effectuer une recherche portant sur toutes les lignes et chaîner les résultats avec l’activité ForEach, consultez les exemples dans Copier plusieurs tables en bloc.

Pipeline

  • L’activité Lookup est configurée pour utiliser LookupDataset, qui fait référence à un emplacement dans le stockage Blob Azure. L’activité Lookup lit le nom de la table SQL à partir d’un fichier JSON dans cet emplacement.
  • L’activité Copy utilise la sortie de l’activité Lookup, qui correspond au nom de la table SQL. La propriété tableName dans SourceDataset est configurée pour utiliser la sortie de l’activité Lookup. L’activité Copy copie les données de la table SQL dans un emplacement du stockage Blob Azure. L’emplacement est spécifié par la propriété 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"
    }
}

Jeu de données de recherche

Le jeu de données lookup est le fichier sourcetable.json dans le dossier de recherche du stockage Azure spécifié par le type AzureBlobStorageLinkedService.

{
    "name": "LookupDataset",
    "properties": {
        "linkedServiceName": {
            "referenceName": "AzureBlobStorageLinkedService",
            "type": "LinkedServiceReference"
        },
        "annotations": [],
        "type": "Json",
        "typeProperties": {
            "location": {
                "type": "AzureBlobStorageLocation",
                "fileName": "sourcetable.json",
                "container": "lookup"
            }
        }
    }
}

Jeu de données source pour l’activité Copy

Le jeu de données source utilise la sortie de l’activité Lookup, qui correspond au nom de la table SQL. L’activité Copy copie les données de cette table SQL dans un emplacement du stockage Blob Azure. L’emplacement est indiqué par le jeu de données sink.

{
    "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"
            }
        }
    }
}

Jeu de données sink pour l’activité Copy

L’activité Copy copie les données de la table SQL dans le fichier filebylookup.csv du dossier csv du stockage Azure. Le fichier est spécifié par la propriété 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

Vous pouvez utiliser deux types de formats pour le fichier sourcetable.json.

Ensemble d’objets

{
   "Id":"1",
   "schema":"dbo",
   "table":"Table1"
}
{
   "Id":"2",
   "schema":"dbo",
   "table":"Table2"
}

Tableau d’objets

[ 
    {
        "Id": "1",
        "schema":"dbo",
        "table":"Table1"
    },
    {
        "Id": "2",
        "schema":"dbo",
        "table":"Table2"
    }
]

Limitations et solutions de contournement

Voici quelques limitations de l’activité de recherche et des suggestions de solutions de contournement.

Limitation Solution de contournement
L’activité de recherche a un maximum de 5 000 lignes et une taille maximale de 4 Mo. Concevoir un pipeline sur deux niveaux où le pipeline externe itère sur un pipeline interne, qui récupère les données ne dépassant pas le nombre maximal de lignes ou la taille de conception.

Consultez les autres activités de flux de contrôle prises en charge par les pipelines Azure Data Factory et Synapse :