Copier des données à partir d’une table SAP à l’aide d’Azure Data Factory ou d’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 !

Cet article décrit comment utiliser l’activité de copie dans des pipelines Azure Data Factory et Azure Synapse Analytics pour copier des données à partir d’une table SAP. Pour plus d’informations, consultez l’article Vue d’ensemble d’activité de copie.

Conseil

Pour en savoir plus sur la prise en charge générale de l’intégration de données SAP, consultez le livre blanc Intégration de données SAP à l’aide d’Azure Data Factory offrant une présentation détaillée sur chaque connecteur SAP, une comparaison et des conseils.

Fonctionnalités prises en charge

Ce connecteur de table SAP est pris en charge pour les activités suivantes :

Fonctionnalités prises en charge IR
Activité de copie (source/-) 0
Activité de recherche 0

① Runtime d’intégration Azure ② Runtime d’intégration auto-hébergé

Pour obtenir la liste des banques de données prises en charge en tant que sources ou récepteurs par l’activité de copie, consultez le tableau banques de données prises en charge.

Plus précisément, ce connecteur de table SAP prend en charge les opérations suivantes :

  • Copie de données à partir d’une table SAP dans :

    • SAP ERP Central Component (SAP ECC) 7.01 ou version ultérieure (dans une pile de package de support SAP récente publiée après 2015).
    • SAP Business Warehouse (SAP BW) version 7.01 ou ultérieure (dans une pile SAP Support Package Stack postérieure à 2015).
    • SAP S/4HANA.
    • Autres produits de SAP Business Suite version 7.01 ou ultérieure (dans une pile SAP Support Package Stack postérieure à 2015).
  • Copie de données à partir d'une table transparente SAP, d'une table mise en pool, d'une table clusterisée et d'une vue.

  • Copie de données à l’aide de l’authentification de base ou de Secure Network Communications (SNC), si SNC est configuré.

  • Connexion à un serveur d’applications SAP ou un serveur de messagerie SAP.

  • Récupération de données par le biais d’une RFC par défaut ou personnalisée.

La version 7.01 ou ultérieure fait référence à la version SAP NetWeaver au lieu de la version SAP ECC. Par exemple, SAP ECC 6.0 EHP 7 dispose en général de la version NetWeaver >=7.4. Si vous n’êtes pas sûr de votre environnement, voici les étapes à suivre pour confirmer la version de votre système SAP :

  1. Utilisez l’interface graphique utilisateur SAP pour vous connecter au système SAP.
  2. Accédez à Système ->État.
  3. Vérifiez la version de SAP_BASIS et assurez-vous qu’elle est supérieure ou égale à 701.
    Check SAP_BASIS

Prérequis

Pour utiliser ce connecteur de table SAP, vous devez effectuer les opérations suivantes :

  • Configurez un runtime d’intégration auto-hébergé (version 3.17 ou ultérieure). Pour plus d’informations, consultez Créer et configurer un runtime d’intégration auto-hébergé.

  • Téléchargez la version 64 bits de SAP Connector for Microsoft .NET 3.0 à partir du site web de SAP et installez-la sur la machine dotée du runtime d’intégration auto-hébergé. Lors de l'installation, veillez à sélectionner l’option Installer les assemblys dans le GAC dans la fenêtre des étapes de configuration facultatives.

    Install SAP Connector for .NET

  • L’utilisateur SAP utilisé dans le connecteur de table SAP doit disposer des autorisations suivantes :

    • Autorisation d'utiliser des destinations RFC (Remote Function Call).
    • Autorisations relatives à l’activité Exécuter de l’objet d’autorisation S_SDSAUTH. Vous pouvez vous reporter à la note SAP 460089 sur les objets d'autorisation majoritaires. Certains RFC sont requis par le connecteur NCo sous-jacent, par exemple RFC_FUNCTION_SEARCH.

Bien démarrer

Pour effectuer l’activité Copie avec un pipeline, vous pouvez vous servir de l’un des outils ou kits SDK suivants :

Créer un service lié à une table SAP à l’aide de l’interface utilisateur

Utilisez les étapes suivantes pour créer un service lié à une table SAP dans l’interface utilisateur du portail Azure.

  1. Accédez à l’onglet Gérer dans votre espace de travail Azure Data Factory ou Synapse et sélectionnez Services liés, puis cliquez sur Nouveau :

  2. Recherchez SAP et sélectionnez le connecteur de table SAP.

    Screenshot of the SAP table connector.

  3. Configurez les informations du service, testez la connexion et créez le nouveau service lié.

    Screenshot of configuration for an SAP table linked service.

Informations de configuration des connecteurs

Les sections suivantes fournissent des informations sur les propriétés utilisées pour définir les entités spécifiques au connecteur de table SAP.

Propriétés du service lié

Les propriétés prises en charge pour le service lié SAP BW Open Hub sont les suivantes :

Propriété Description Obligatoire
type La propriété type doit être définie sur SapTable. Oui
server Nom du serveur sur lequel réside l’instance SAP.
Permet de se connecter à un serveur d'applications SAP.
Non
systemNumber Numéro du système SAP.
Permet de se connecter à un serveur d'applications SAP.
Valeur autorisée : Nombre décimal à deux chiffres représenté sous forme de chaîne.
Non
messageServer Nom d’hôte du serveur de messagerie SAP.
Permet de se connecter à un serveur de messagerie SAP.
Non
messageServerService Nom de service ou numéro de port du serveur de messagerie.
Permet de se connecter à un serveur de messagerie SAP.
Non
systemId ID du système SAP où se trouve la table.
Permet de se connecter à un serveur de messagerie SAP.
Non
logonGroup Groupe de connexion du système SAP.
Permet de se connecter à un serveur de messagerie SAP.
Non
clientId ID du client dans le système SAP.
Valeur autorisée : Nombre décimal à trois chiffres représenté sous forme de chaîne.
Oui
language Langue utilisée par le système SAP.
La valeur par défaut est EN.
Non
userName Nom de l’utilisateur ayant accès au serveur SAP. Oui
password Mot de passe de l’utilisateur. Marquez ce champ avec le type SecureString afin de le stocker en toute sécurité, ou référencez un secret stocké dans Azure Key Vault. Oui
sncMode Indicateur d’activation SNC permettant d’accéder au serveur SAP où se trouve la table.
Applicable si vous voulez utiliser SNC pour vous connecter au serveur SAP.
Valeurs autorisées : 0 (off, valeur par défaut) ou 1 (on).
Non
sncMyName Nom SNC de l’indicateur permettant d’accéder au serveur SAP où se trouve la table.
S’applique si sncMode est défini sur On.
Non
sncPartnerName Nom SNC du partenaire de communication permettant d’accéder au serveur SAP où se trouve la table.
S’applique si sncMode est défini sur On.
Non
sncLibraryPath Bibliothèque du produit de sécurité externe permettant d’accéder au serveur SAP où se trouve la table.
S’applique si sncMode est défini sur On.
Non
sncQop Niveau SNC Quality of Protection à appliquer.
S’applique si sncMode est défini sur On.
Les valeurs autorisées sont 1 (Authentification), 2 (Intégrité), 3 (Confidentialité), 8 (Par défaut), 9 (Maximum).
Non
connectVia Le runtime d’intégration à utiliser pour se connecter à la banque de données. Un runtime d’intégration auto-hébergé est nécessaire, comme indiqué précédemment dans Prérequis. Oui

Exemple 1 : Se connecter à un serveur d'applications SAP

{
    "name": "SapTableLinkedService",
    "properties": {
        "type": "SapTable",
        "typeProperties": {
            "server": "<server name>",
            "systemNumber": "<system number>",
            "clientId": "<client ID>",
            "userName": "<SAP user>",
            "password": {
                "type": "SecureString",
                "value": "<Password for SAP user>"
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Exemple 2 : Se connecter à un serveur de messagerie SAP

{
    "name": "SapTableLinkedService",
    "properties": {
        "type": "SapTable",
        "typeProperties": {
            "messageServer": "<message server name>",
            "messageServerService": "<service name or port>",
            "systemId": "<system ID>",
            "logonGroup": "<logon group>",
            "clientId": "<client ID>",
            "userName": "<SAP user>",
            "password": {
                "type": "SecureString",
                "value": "<Password for SAP user>"
            }
        },
        "connectVia": {
            "referenceName": "<name of integration runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Exemple 3 : Se connecter via SNC

{
    "name": "SapTableLinkedService",
    "properties": {
        "type": "SapTable",
        "typeProperties": {
            "server": "<server name>",
            "systemNumber": "<system number>",
            "clientId": "<client ID>",
            "userName": "<SAP user>",
            "password": {
                "type": "SecureString",
                "value": "<Password for SAP user>"
            },
            "sncMode": 1,
            "sncMyName": "<SNC myname>",
            "sncPartnerName": "<SNC partner name>",
            "sncLibraryPath": "<SNC library path>",
            "sncQop": "8"
        },
        "connectVia": {
            "referenceName": "<name of integration runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Propriétés du jeu de données

Pour obtenir la liste complète des sections et propriétés permettant de définir des jeux de données, consultez Jeux de données. Cette section fournit la liste des propriétés prises en charge par le jeu de données de la table SAP.

Pour copier des données depuis et vers le service lié SAP BW Open Hub, les propriétés suivantes sont prises en charge :

Propriété Description Obligatoire
type La propriété type doit être définie sur SapTableResource. Oui
tableName Nom de la table SAP à partir de laquelle copier des données. Oui

Exemple

{
    "name": "SAPTableDataset",
    "properties": {
        "type": "SapTableResource",
        "typeProperties": {
            "tableName": "<SAP table name>"
        },
        "schema": [],
        "linkedServiceName": {
            "referenceName": "<SAP table linked service name>",
            "type": "LinkedServiceReference"
        }
    }
}

Propriétés de l’activité de copie

Pour obtenir la liste complète des sections et des propriétés permettant de définir des activités, consultez Pipelines. Cette section fournit la liste des propriétés prises en charge par la source de la table SAP.

Table SAP en tant que source

Pour copier des données à partir d’une table SAP, les propriétés suivantes sont prises en charge :

Propriété Description Obligatoire
type La propriété type doit être définie sur SapTableSource. Oui
rowCount Nombre de lignes à récupérer. Non
rfcTableFields Champs (colonnes) à copier à partir de la table SAP. Par exemple : column0, column1. Non
rfcTableOptions Options permettant de filtrer les lignes d’une table SAP. Par exemple : COLUMN0 EQ 'SOMEVALUE'. Voir également la table des opérateurs de requête SAP plus loin dans cet article. Non
customRfcReadTableFunctionModule Module de fonction RFC personnalisé qui peut être utilisé pour lire des données à partir de la table SAP.
Vous pouvez utiliser un module de fonction RFC personnalisé pour définir la façon dont les données sont récupérées à partir de votre système SAP et retournées au service. Le module de fonction personnalisé doit avoir une interface implémentée (importation, exportation, tables) similaire à /SAPDS/RFC_READ_TABLE2, l'interface par défaut utilisée par le service.
Non
partitionOption Mécanisme de partition permettant d’effectuer une lecture à partir d’une table SAP. Les options prises en charge sont les suivantes :
  • None
  • PartitionOnInt (entier normal ou valeurs entières avec remplissage à l’aide de zéros à gauche ; par exemple, 0000012345)
  • PartitionOnCalendarYear (4 chiffres au format « AAAA »)
  • PartitionOnCalendarMonth (6 chiffres au format « AAAAMM »)
  • PartitionOnCalendarDate (8 chiffres au format « AAAAMMJJ »)
  • PartitionOntime (6 chiffres au format « HHMMSS », par exemple 235959)
Non
partitionColumnName Nom de la colonne utilisée pour partitionner les données. Non
partitionUpperBound Valeur maximale de la colonne spécifiée dans partitionColumnName qui sera utilisée pour poursuivre le partitionnement. Non
partitionLowerBound Valeur minimale de la colonne spécifiée dans partitionColumnName qui sera utilisée pour poursuivre le partitionnement. (Remarque : partitionLowerBound ne peut pas être « 0 » quand l’option de partition est PartitionOnInt) Non
maxPartitionsNumber Nombre maximal de partitions à utiliser pour diviser les données. La valeur par défaut est 1. Non
sapDataColumnDelimiter Caractère unique utilisé comme délimiteur passé à SAP RFC pour fractionner les données de sortie. Non

Conseil

Si votre table SAP contient un grand volume de données, par exemple plusieurs milliards de lignes, utilisez partitionOption et partitionSetting pour fractionner les données en partitions plus petites. Dans ce cas, les données sont lues par partition et chaque partition de données est extraite de votre serveur SAP via un seul appel RFC.

Si nous prenons l’exemple de partitionOption avec la valeur partitionOnInt, le nombre de lignes dans chaque partition est calculé à l’aide de cette formule : (nombre total de lignes comprises entre partitionUpperBound et partitionLowerBound)/maxPartitionsNumber.

Pour charger des partitions de données en parallèle afin d’accélérer la copie, le degré parallèle est contrôlé par le paramètre parallelCopies de l’activité de copie. Par exemple, si vous définissez parallelCopies sur la valeur quatre, le service génère et exécute simultanément quatre requêtes selon l’option de partition et les paramètres que vous avez spécifiés, chacune récupérant une partie des données de votre table SAP. Nous vous recommandons vivement de faire de maxPartitionsNumber un multiple de la valeur de la propriété parallelCopies. Lors de la copie de données dans un magasin de données basé sur des fichiers, il est également recommandé de les écrire dans un dossier sous forme fichiers multiples (spécifiez uniquement le nom du dossier). Ceci offre de meilleures performances qu’une écriture dans un fichier unique.

Conseil

L’option BASXML est activée par défaut pour ce connecteur de table SAP dans le service.

Dans rfcTableOptions, vous pouvez utiliser les opérateurs de requête SAP courants suivants pour filtrer les lignes :

Opérateur Description
EQ Égal à
NE Différent de
LT Inférieur à
LE Inférieur ou égal à
GT Supérieur à
GE Supérieur ou égal à
IN Comme dans TABCLASS IN ('TRANSP', 'INTTAB')
LIKE Comme dans LIKE 'Emma%'

Exemple

"activities":[
    {
        "name": "CopyFromSAPTable",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<SAP table input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "SapTableSource",
                "partitionOption": "PartitionOnInt",
                "partitionSettings": {
                     "partitionColumnName": "<partition column name>",
                     "partitionUpperBound": "2000",
                     "partitionLowerBound": "1",
                     "maxPartitionsNumber": 500
                 }
            },
            "sink": {
                "type": "<sink type>"
            },
            "parallelCopies": 4
        }
    }
]

Joindre des tables SAP

Actuellement, le connecteur de table SAP ne prend en charge qu’une seule table avec le module de fonction par défaut. Pour récupérer les données jointes de plusieurs tables, vous pouvez tirer parti de la propriété customRfcReadTableFunctionModule dans le connecteur de table SAP en procédant comme suit :

  • Écrivez un module de fonction personnalisé qui peut accepter une requête comme OPTIONS et appliquer votre propre logique pour récupérer les données.
  • Pour « Module de fonction personnalisé », entrez le nom de votre module de fonction personnalisé.
  • Pour « Options de table RFC », spécifiez l’instruction de jointure de tables à alimenter dans votre module de fonction en tant qu’OPTIONS, par exemple « <TABLE1> INNER JOIN <TABLE2> ON COLUMN0 ».

Voici un exemple :

Sap Table Join

Conseil

Vous pouvez également envisager d’agréger les données jointes dans AFFICHAGE, qui est pris en charge par le connecteur de table SAP. Vous pouvez également essayer d’extraire les tables associées pour les intégrer à Azure (par exemple, Stockage Azure, Azure SQL Database), puis utiliser Data Flow pour procéder à une jointure ou un filtrage supplémentaire.

Créer un module de fonction personnalisé

Pour la table SAP, nous prenons actuellement en charge la propriété customRfcReadTableFunctionModule dans la source de copie, ce qui vous permet de tirer parti de votre propre logique et de traiter les données.

Pour vous aider rapidement, voici quelques conditions requises pour prendre en main le « module de fonction personnalisé » :

  • Définition :

    Definition

  • Exportez les données dans l’une des tables ci-dessous :

    Export table 1

    Export table 2

Vous trouverez ci-dessous des illustrations du fonctionnement du connecteur de table SAP avec le module de fonction personnalisé :

  1. Créez une connexion avec le serveur SAP via SAP NCO.

  2. Appelez le « module de fonction personnalisé » avec les paramètres définis comme suit :

    • QUERY_TABLE : nom de la table que vous définissez dans le jeu de données de la table SAP ;
    • Délimiteur : délimiteur que vous définissez dans la source de la table SAP ;
    • ROWCOUNT/Option/Fields : nombre de lignes/option d’agrégation/champs que vous définissez dans la source de la table.
  3. Obtenez le résultat et analysez les données en suivant les méthodes ci-dessous :

    1. Analysez la valeur de la table Fields pour récupérer les schémas.

      Parse values in Fields

    2. Obtenez les valeurs de la table de sortie pour voir quelle table contient ces valeurs.

      Get values in output table

    3. Récupérez les valeurs dans la table OUT_TABLE, analysez les données, puis écrivez-les dans le récepteur.

Mappages de type de données pour une table SAP

Lors de la copie de données à partir d’une table SAP, les mappages suivants sont utilisés à partir des types de données de table SAP en types de données intermédiaires utilisés dans le service. Pour découvrir comment l’activité de copie mappe le schéma et le type de données la source au récepteur, consultez Mappage de schéma dans l’activité de copie.

Type SAP ABAP Type de données de service intermédiaire
C (Chaîne) String
I (Entier) Int32
F (Flottant) Double
D (Date) String
T (Heure) String
P P (« packed » DCB, Devise, Décimal, Qté) Decimal
N (Numérique) String
X (Données binaires et brutes) String

Propriétés de l’activité Lookup

Pour en savoir plus sur les propriétés, consultez Activité Lookup.

Pour obtenir une liste des magasins de données pris en charge comme sources et récepteurs par l’activité de copie, consultez Magasins de données pris en charge.