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/-) | ② |
Activité de recherche | ② |
① 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 :
- Utilisez l’interface graphique utilisateur SAP pour vous connecter au système SAP.
- Accédez à Système ->État.
- Vérifiez la version de SAP_BASIS et assurez-vous qu’elle est supérieure ou égale à 701.
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.
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 :
- L’outil Copier des données
- Le portail Azure
- Le kit SDK .NET
- Le kit SDK Python
- Azure PowerShell
- L’API REST
- Le modèle Azure Resource Manager
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.
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 :
Recherchez SAP et sélectionnez le connecteur de table SAP.
Configurez les informations du service, testez la connexion et créez le nouveau service lié.
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 :
|
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 :
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 :
Exportez les données dans l’une des tables ci-dessous :
Vous trouverez ci-dessous des illustrations du fonctionnement du connecteur de table SAP avec le module de fonction personnalisé :
Créez une connexion avec le serveur SAP via SAP NCO.
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.
Obtenez le résultat et analysez les données en suivant les méthodes ci-dessous :
Analysez la valeur de la table Fields pour récupérer les schémas.
Obtenez les valeurs de la table de sortie pour voir quelle table contient ces valeurs.
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.
Contenu connexe
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.