Comment stocker les données d'exécution dans Azure Data Factory entre les exécutions de pipeline?
J'ai suivi le tutoriel de Microsoft pour charger incrémentalement / delta des données à partir d'une base de données SQL Server.
Il utilise un filigrane (horodatage) pour garder une trace des lignes modifiées depuis la dernière fois. Le didacticiel stocke le filigrane dans une base de données Azure SQL à l'aide de l'activité «Procédure stockée» dans le pipeline afin qu'il puisse être réutilisé lors de la prochaine exécution.
Il semble exagéré d'avoir une base de données Azure SQL juste pour stocker ce petit peu de méta-informations (ma base de données source est en lecture seule btw). Je préfère simplement stocker cela ailleurs dans Azure. Peut-être dans le stockage blob ou autre.
En bref: existe-t-il un moyen simple de suivre ce type de données ou sommes-nous limités à utiliser des procs stockés (ou Azure Functions et al) pour cela?

Réponses
J'avais rencontré un scénario très similaire, et d'après ce que j'ai trouvé, vous ne pouvez pas stocker d'informations de filigrane dans ADF - du moins pas d'une manière à laquelle vous pouvez facilement accéder.
En fin de compte, je viens de créer une base de données Azure SQL de niveau de base pour stocker mes informations de filigrane / configuration sur un serveur SQL que j'utilisais déjà dans mes pipelines.
La bonne chose à ce sujet est que lorsque ma solution s'est étendue à plusieurs unités commerciales, toutes avec des bases de données différentes, je pouvais toujours conserver les informations de filigrane pour chacune d'entre elles en ajoutant simplement une colonne indiquant à quelle BU cette information de filigrane spécifique était destinée.
Le stockage Blob est en effet une option moins chère, mais j'ai trouvé que cela nécessitait un peu plus d'efforts que la simple utilisation d'une base de données / table supplémentaire dans une base de données existante.
Je conviens qu'il serait vraiment utile de pouvoir maintenir un petit jeu de données dans ADF lui-même pour les petits éléments de configuration - probablement une bonne suggestion à faire à Microsoft!
Il existe un moyen d'y parvenir en utilisant l'activité de copie, mais il est compliqué d'obtenir le dernier filigrane dans «LookupOldWaterMarkActivity», juste pour référence.
Paramètre du jeu de données:

Copier le paramètre d'activité:
L'ensemble de données source et récepteur est le même. Remplacez l'expression dans les colonnes supplémentaires par@{activity('LookupNewWaterMarkActivity').output.firstRow.NewWatermarkvalue}

Grâce à cela, vous pouvez enregistrer le filigrane en tant que colonne dans un fichier .txt. Mais il est difficile d'obtenir le dernier filigrane avec l'activité de recherche. Parce que votre sortie de 'LookupOldWaterMarkActivity' sera comme ceci:
{
"count": 1,
"value": [
{
"Prop_0": "11/24/2020 02:39:14",
"Prop_1": "11/24/2020 08:31:42"
}
]
}
Le nom de la clé est généré par ADF. Si vous voulez obtenir "24/11/2020 08:31:42", vous devez obtenir le nombre de colonnes, puis utiliser une expression comme celle-ci:@activity('LookupOldWaterMarkActivity').output.value[0][Prop_(column count - 1)]
Comment obtenir le dernier filigrane:
utiliser l'activité GetMetadata pour obtenir columnCount
utilisez cette expression:
@activity('LookupOldWaterMarkActivity').output.value[0][concat('Prop_',string(sub(activity('Get Metadata1').output.columnCount,1)))]