Fermer

juillet 21, 2022

Mappages de colonnes en tant que contenu dynamique dans Azure Data Factory


Dans cet article, j’aimerais vous expliquer l’approche par laquelle nous pouvons fournir les mappages de colonnes en tant que contenu dynamique dans les activités de copie de données dans Azure Data Factory à l’aide d’une table placée dans une base de données.

Pourquoi est-il nécessaire de fournir les mappages de colonnes en tant que contenu dynamique ?

Nous pouvons utiliser l’option « Import Schemas » sous Mapping pour récupérer les colonnes source et cible et les mapper manuellement, ce qui est utile lors de l’utilisation de l’activité de copie de données pour une seule table. Cependant, lorsque nous utilisons l’activité de copie sous une boucle pour chaque, la table et ses mappages respectifs seront modifiés pour chaque exécution dans la boucle ForEach où il est nécessaire de fournir les mappages de colonnes en tant que contenu dynamique basé sur la table respective du Pour chaque course.

Il existe deux approches pour fournir les mappages de colonnes dans l’activité de copie de données.

1.Mappage manuel explicite : Cela nécessite une configuration manuelle des mappages pour chaque colonne dans l’activité de copie de données, ce qui prend du temps.

1

2.Mappage par défaut : En laissant les propriétés de mappage vides, l’activité Copier les données prendra les colonnes source et les mappera aux colonnes de la table cible en respectant la casse. Cette option autorise les activités de copie de données réutilisables à condition que la source et la cible soient également configurées dynamiquement.

2

Tableau de configuration de mappage :

Pour fournir les mappages de colonnes en tant que contenu dynamique dans l’activité de copie de données, nous devons créer une table de configuration pour contenir les mappages de colonnes prédéfinis qui peuvent être récupérés lors de l’exécution en fonction de la table requise en convertissant dans un format acceptable. Vous trouverez ci-dessous la requête de création de table utilisée pour créer la table de mappage :

CREATE TABLE MAPPINGTABLE
(
M_ID                  INT IDENTITY (1,1) NOT NULL,
SCHEMA_NAME           VARCHAR(MAX),
TABLE_NAME            VARCHAR(MAX),
SOURCE_COLUMN         VARCHAR(MAX),
TARGET_COLUMN         VARCHAR(MAX),
PRIMARY KEY (M_ID))
);

Vous trouverez ci-dessous la requête utilisée pour insérer les données dans la table de mappage :

INSERT INTO MAPPINGTABLE 
(SCHEMA_NAME, TABLE_NAME, SOURCE_COLUMN, TARGET_COLUMN)
VALUES 
('DBO','EMPLOYEE', '[EMPLOYEE_ID, EMPLOYEE_NAME, DESIGNATION, DATE_OF_JOINING, REPORTING_MANAGER]', '[EMPLOYEE_ID, EMPLOYEE_NAME, DESIGNATION, DATE_OF_JOINING, REPORTING_MANAGER]');

Le tableau devrait ressembler à ci-dessous :

Sélectionnez * dans MAPPINGTABLE ;

3

Une fois la table créée avec toutes les valeurs requises, nous avons besoin d’une procédure stockée qui convertira les données de la table de mappage dans un format JSON acceptable pour le contenu dynamique.

Vous trouverez ci-dessous la procédure stockée utilisée pour convertir les données dans un format JSON acceptable :

CREATE PROCEDURE [dbo].[sp_getColumnMapping]
  @schema_name VARCHAR(100),
  @table_name VARCHAR(100) 
AS
BEGIN
  DECLARE @json_construct varchar(MAX) = '{"type": "TabularTranslator", "mappings": {X}}';
  DECLARE @json VARCHAR(MAX);
  SET @json = (Select srccol.value as 'source.name', trgcol.value as 'target.name' from dbo.MappingTable c  cross apply STRING_SPLIT(replace(replace(source_column,'[',''),']',''),',') as srccol cross apply STRING_SPLIT(replace(replace(Target_Column,'[',''),']',''),',') as trgcol WHERE [schema_name] = @schema_name AND [table_name] = @table_name AND srccol.value=trgcol.value FOR JSON PATH);
  SELECT REPLACE(@json_construct,'{X}', @json) AS json_output;
END
GO

Si nous exécutons la procédure stockée ci-dessus avec le nom de schéma et le nom de table fournis, elle renverra la sortie JSON ci-dessous :

{
  "type": "TabularTranslator",
  "mappings": [
    {
      "source": {
        "name": "EMPLOYEE_ID"
      },
      "target": {
        "name": "EMPLOYEE_ID"
      }
    },
    {
      "source": {
        "name": "EMPLOYEE_NAME"
      },
      "target": {
        "name": "EMPLOYEE_NAME"
      }
    },
    {
      "source": {
        "name": "DESIGNATION"
      },
      "target": {
        "name": "DESIGNATION"
      }
    },
    {
      "source": {
        "name": "DATE_OF_JOINING"
      },
      "target": {
        "name": "DATE_OF_JOINING"
      }
    },
    {
      "source": {
        "name": "REPORTING_MANAGER"
      },
      "target": {
        "name": "REPORTING_MANAGER"
      }
    }
  ]
}

Configuration de la recherche et du mappage de l’usine de données :

Dans les paramètres de la recherche, sélectionnez l’option Procédure stockée et indiquez le nom du SP que nous avons créé à l’étape précédente. Importez les paramètres et fournissez les valeurs appropriées.

Noter: Lors de l’utilisation de cette recherche dans une boucle ForEach, vous êtes censé fournir aux valeurs de paramètre un contenu dynamique (comme @item().SchemaName ou @item().TableName)

4

Maintenant, nous devons transmettre la sortie de cette recherche à l’activité de copie de données en tant que contenu dynamique sous Mappages.

Noter: Deux paramètres sont créés dans une procédure stockée, à savoir schema_name et table_name.

Maintenant, accédez à l’activité Copier les données et sélectionnez l’onglet Mappage, Ajouter du contenu dynamique aux propriétés de mappage. La syntaxe devrait ressembler à ci-dessous :

@json(activity('Lookup_name').output.firstRow.column_name)

5

6

sept






Source link