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 :
Recherchez Lookup dans le volet Activités du pipeline, puis faites glisser une activité Lookup vers le canevas du pipeline.
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.
Choisissez un jeu de données source existant, ou sélectionnez le bouton Nouveau pour en créer un.
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.
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.
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 valeurtrue
(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 valeurfalse
, le format de la sortie se présente comme dans le code suivant. Un champcount
indique le nombre d’enregistrements qui sont retournés. Les valeurs détaillées sont affichées sous un tableauvalue
fixe. Dans ce cas, l’activité Lookup est suivie d’une activité Foreach. Vous passez le tableauvalue
au champitems
de l’activité ForEach en utilisant le modèle@activity('MyLookupActivity').output.value
. Pour accéder aux éléments du tableauvalue
, 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. |
Contenu connexe
Consultez les autres activités de flux de contrôle prises en charge par les pipelines Azure Data Factory et Synapse :