Copier des données de Teradata Vantage à l’aide d’Azure Data Factory et 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 provenant de Teradata Vantage. Il s’appuie sur la vue d’ensemble de l’activité de copie.

Fonctionnalités prises en charge

Ce connecteur Teradata est pris en charge pour les fonctionnalité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 Teradata prend en charge :

  • Teradata versions 14.10, 15.0, 15.10, 16.0, 16.10 et 16.20.
  • Copie des données avec l’authentification De base, Windows ou LDAP.
  • Copie en parallèle à partir d’une source Teradata. Pour en savoir plus, voir Copie en parallèle à partir de Teradata.

Prérequis

Si votre magasin de données se trouve dans un réseau local, un réseau virtuel Azure ou un cloud privé virtuel Amazon, vous devez configurer un runtime d’intégration auto-hébergé pour vous y connecter.

Si votre magasin de données est un service de données cloud managé, vous pouvez utiliser Azure Integration Runtime. Si l’accès est limité aux adresses IP qui sont approuvées dans les règles de pare-feu, vous pouvez ajouter les adresses IP Azure Integration Runtime dans la liste d’autorisation.

Vous pouvez également utiliser la fonctionnalité de runtime d’intégration de réseau virtuel managé dans Azure Data Factory pour accéder au réseau local sans installer et configurer un runtime d’intégration auto-hébergé.

Pour plus d’informations sur les mécanismes de sécurité réseau et les options pris en charge par Data Factory, consultez Stratégies d’accès aux données.

Si vous utilisez un runtime d’intégration auto-hébergé, notez qu’il fournit un pilote Teradata intégré depuis la version 3.18. Vous n’avez pas besoin d’installer manuellement un pilote. Le pilote requiert l’installation du package Redistribuable Visual C++ pour Visual Studio 2012 Update 4 sur l’ordinateur du runtime d’intégration auto-hébergé. S’il n’est pas déjà installé, vous pouvez le télécharger ici.

Prise en main

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é à Teradata à l’aide de l’interface utilisateur

Utilisez les étapes suivantes pour créer un service lié à Teradata 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 Teradata et sélectionnez le connecteur Teradata.

    Select the Teradata connector.

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

    Configure a linked service to Teradata.

Informations de configuration des connecteurs

Les sections suivantes fournissent des informations sur les propriétés utilisées pour définir les entités Data Factory propres au connecteur Teradata.

Propriétés du service lié

Le service lié Teradata prend en charge les propriétés suivantes :

Propriété Description Obligatoire
type La propriété de type doit être définie sur Teradata. Oui
connectionString Spécifie les informations requises pour se connecter à l’instance de Teradata. Consultez les exemples suivants.
Vous pouvez également définir un mot de passe dans Azure Key Vault et extraire la configuration password de la chaîne de connexion. Pour plus d’informations, consultez la section Stocker des informations d’identification dans Azure Key Vault.
Oui
username Spécifiez le nom d’utilisateur associé à la connexion à Teradata. S’applique lors de l’utilisation de l’authentification Windows. Non
mot de passe Spécifiez un mot de passe pour le compte d’utilisateur que vous avez spécifié pour le nom d’utilisateur. Vous pouvez également choisir de référencer un secret stocké dans Azure Key Vault.
S’applique lors de l’utilisation de l’authentification Windows ou du référencement du mot de passe dans Key Vault pour l’authentification de base.
Non
connectVia Runtime d’intégration à utiliser pour la connexion à la banque de données. Pour plus d’informations, consultez la section Conditions préalables. À défaut de spécification, le runtime d’intégration Azure par défaut est utilisé. Non

Autres propriétés de connexion que vous pouvez définir dans la chaîne de connexion selon votre cas :

Propriété Description Valeur par défaut
TdmstPortNumber Numéro du port utilisé pour accéder à la base de données Teradata.
Ne modifiez pas cette valeur à moins que le support technique vous demande de le faire.
1025
UseDataEncryption Spécifie s’il faut chiffrer toutes les communications avec la base de données Teradata. Les valeurs autorisées sont 0 ou 1.

- 0 (désactivé, valeur par défaut) : Chiffre uniquement les informations d’authentification.
- 1 (activé) : Chiffre toutes les données transmises entre le pilote et la base de données.
0
CharacterSet Jeu de caractères à utiliser pour la session. Par exemple, CharacterSet=UTF16.

Cette valeur peut être un jeu de caractères défini par l’utilisateur ou l’un des jeux de caractères prédéfinis suivants :
- ASCII
- UTF8
- UTF16
- LATIN1252_0A
- LATIN9_0A
- LATIN1_0A
- Shift-JIS (Windows, compatible DOS, KANJISJIS_0S)
- EUC (compatible Unix, KANJIEC_0U)
- Mainframe IBM (KANJIEBCDIC5035_0I)
- KANJI932_1S0
- BIG5 (TCHBIG5_1R0)
- GB (SCHGB2312_1T0)
- SCHINESE936_6R0
- TCHINESE950_8R0
- NetworkKorean (HANGULKSC5601_2R4)
- HANGUL949_7R0
- ARABIC1256_6A0
- CYRILLIC1251_2A0
- HEBREW1255_5A0
- LATIN1250_1A0
- LATIN1254_7A0
- LATIN1258_8A0
- THAI874_4A0
ASCII
MaxRespSize Taille maximale de la mémoire tampon de réponse pour les requêtes SQL en Ko (kilo-octets). Par exemple, MaxRespSize=‭10485760‬.

Pour la version de base de données Teradata 16.00 (ou ultérieure), la valeur maximale est 7361536. Pour les connexions qui utilisent des versions antérieures, la valeur maximale est 1048576.
65536
MechanismName Pour utiliser le protocole LDAP afin d’authentifier la connexion, spécifiez MechanismName=LDAP. N/A

Exemple : utilisation de l’authentification de base

{
    "name": "TeradataLinkedService",
    "properties": {
        "type": "Teradata",
        "typeProperties": {
            "connectionString": "DBCName=<server>;Uid=<username>;Pwd=<password>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Exemple : utilisation d’une authentification Windows

{
    "name": "TeradataLinkedService",
    "properties": {
        "type": "Teradata",
        "typeProperties": {
            "connectionString": "DBCName=<server>",
            "username": "<username>",
            "password": "<password>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Exemple d’utilisation de l’authentification LDAP

{
    "name": "TeradataLinkedService",
    "properties": {
        "type": "Teradata",
        "typeProperties": {
            "connectionString": "DBCName=<server>;MechanismName=LDAP;Uid=<username>;Pwd=<password>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Notes

La charge utile suivante est toujours prise en charge. Cependant, nous vous invitons à utiliser la nouvelle charge utile dorénavant.

Charge utile précédente :

{
    "name": "TeradataLinkedService",
    "properties": {
        "type": "Teradata",
        "typeProperties": {
            "server": "<server>",
            "authenticationType": "<Basic/Windows>",
            "username": "<username>",
            "password": {
                "type": "SecureString",
                "value": "<password>"
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Propriétés du jeu de données

Cette section fournit une liste des propriétés prises en charge par le jeu de données Teradata. Pour obtenir la liste complète des sections et propriétés disponibles pour la définition de jeux de données, consultez l’article sur les jeux de données.

Pour copier des données à partir de Teradata, les propriétés suivantes sont prises en charge :

Propriété Description Obligatoire
type La propriété type du jeu de données doit être définie sur TeradataTable. Oui
database Nom de l’instance Teradata. Non (si « query » dans la source de l’activité est spécifié)
table Nom de la table dans l’instance Teradata. Non (si « query » dans la source de l’activité est spécifié)

Exemple :

{
    "name": "TeradataDataset",
    "properties": {
        "type": "TeradataTable",
        "typeProperties": {},
        "schema": [],        
        "linkedServiceName": {
            "referenceName": "<Teradata linked service name>",
            "type": "LinkedServiceReference"
        }
    }
}

Notes

Le jeu de données de type RelationalTable est toujours pris en charge. Toutefois, nous vous recommandons d’utiliser le nouveau jeu de données.

Charge utile précédente :

{
    "name": "TeradataDataset",
    "properties": {
        "type": "RelationalTable",
        "linkedServiceName": {
            "referenceName": "<Teradata linked service name>",
            "type": "LinkedServiceReference"
        },
        "typeProperties": {}
    }
}

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

Cette section fournit une liste des propriétés prises en charge par la source Teradata. Pour obtenir la liste complète des sections et propriétés disponibles pour la définition des activités, consultez Pipelines.

Teradata en tant que source

Conseil

Pour charger efficacement des données à partir de Teradata à l'aide du partitionnement des données, consultez la section Copie en parallèle à partir de Teradata.

Pour copier des données à partir de Teradata, les propriétés prises en charge dans la section source de l'activité de copie sont les suivantes :

Propriété Description Obligatoire
type La propriété type de la source de l’activité de copie doit être définie sur TeradataSource. Oui
query Utiliser la requête SQL personnalisée pour lire les données. par exemple "SELECT * FROM MyTable".
Lorsque vous activez la charge partitionnée, vous devez utiliser les paramètres de partition intégrés correspondants dans votre requête. Pour consulter des exemples, voir Copie en parallèle à partir de Teradata.
Non (si la table du jeu de données est spécifiée)
partitionOptions Spécifie les options de partitionnement des données utilisées pour charger des données à partir de Teradata.
Les valeurs autorisées sont : Aucun (par défaut), Hachage et DynamicRange.
Lorsqu’une option de partition est activée (autrement dit, pas None), le degré de parallélisme pour charger simultanément des données à partir de Teradata est contrôlé par le paramètre parallelCopies de l’activité de copie.
Non
partitionSettings Spécifiez le groupe de paramètres pour le partitionnement des données.
S’applique lorsque l’option de partitionnement n’est pas None.
Non
partitionColumnName Spécifiez le nom de la colonne source qu’utilisera le partitionnement par plages de valeurs ou hachage pour la copie en parallèle. S’il n’est pas spécifié, l’index primaire de la table sera automatiquement détecté et utilisé en tant que colonne de partition.
S’applique lorsque l’option de partitionnement est Hash ou DynamicRange. Si vous utilisez une requête pour récupérer des données sources, utilisez ?AdfHashPartitionCondition ou ?AdfRangePartitionColumnName dans la clause WHERE. Consultez l’exemple de la section Copie en parallèle à partir de Teradata.
Non
partitionUpperBound Valeur maximale de la colonne de partition à partir de laquelle copier des données.
S’applique lorsque de l’option de partition est DynamicRange. Si vous avez recours à une requête pour récupérer des données sources, utilisez ?AdfRangePartitionUpbound dans la clause WHERE. Pour consulter un exemple, voir Copie en parallèle à partir de Teradata.
Non
partitionLowerBound Valeur minimale de la colonne de partition à partir de laquelle copier des données.
S’applique lorsque l’option de partitionnement est DynamicRange. Si vous utilisez une requête pour récupérer des données sources, utilisez ?AdfRangePartitionLowbound dans la clause WHERE. Pour consulter un exemple, voir Copie en parallèle à partir de Teradata.
Non

Notes

La source de copie de type RelationalSource est toujours prise en charge, mais ne gère pas la nouvelle charge en parallèle intégrée à partir de Teradata (options de partition). Toutefois, nous vous recommandons d’utiliser le nouveau jeu de données.

Exemple : copie de données à l’aide de la requête de base sans partition

"activities":[
    {
        "name": "CopyFromTeradata",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<Teradata input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "TeradataSource",
                "query": "SELECT * FROM MyTable"
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

Copie en parallèle à partir de Teradata

Le connecteur Teradata propose un partitionnement de données intégré pour copier des données à partir de Teradata, en parallèle. Vous trouverez des options de partitionnement de données dans la table Source de l’activité de copie.

Screenshot of partition options

Lorsque vous activez la copie partitionnée, le service exécute des requêtes en parallèle sur votre source Teradata pour charger des données par partitions. Le degré de parallélisme est contrôlé via le paramètre parallelCopies sur 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 Teradata.

Il vous est recommandé d’activer la copie en parallèle avec partitionnement des données notamment lorsque vous chargez une grande quantité de données à partir de Teradata. Voici quelques suggestions de configurations pour différents scénarios. Lors de la copie de données dans un magasin de données basé sur un fichier, il est recommandé d’écrire les données dans un dossier sous la forme de plusieurs fichiers (spécifiez uniquement le nom du dossier). Les performances seront meilleures qu’avec l’écriture de données dans un seul fichier.

Scénario Paramètres suggérés
Chargement complet à partir d’une table volumineuse. Option de partition : Hachage.

Lors de l’exécution, le service détecte automatiquement la colonne d’index principale, y applique un hachage et copie les données par partitions.
Chargez une grande quantité de données à l’aide d’une requête personnalisée. Option de partition : Hachage.
Requête: SELECT * FROM <TABLENAME> WHERE ?AdfHashPartitionCondition AND <your_additional_where_clause>.
Colonne de partition : Spécifiez la colonne utilisée pour appliquer la partition par hachage. Si cette colonne n’est pas spécifiée, le service détecte automatiquement la colonne PK de la table que vous avez spécifiée dans le jeu de données Teradata.

Lors de l’exécution, le service remplace ?AdfHashPartitionCondition par la logique de partition de hachage et l’envoie à Teradata.
Chargez une grande quantité de données à l’aide d’une requête personnalisée, qui dispose d’une colonne d’entiers avec valeur uniformément distribuée pour le partitionnement par plages de valeurs. Options de partition : Partition dynamique par spécification de plages de valeurs.
Requête: SELECT * FROM <TABLENAME> WHERE ?AdfRangePartitionColumnName <= ?AdfRangePartitionUpbound AND ?AdfRangePartitionColumnName >= ?AdfRangePartitionLowbound AND <your_additional_where_clause>.
Colonne de partition : Spécifiez la colonne utilisée pour partitionner les données. Vous pouvez procéder au partitionnement par rapport à la colonne avec le type de données entier.
Limite supérieure de partition et limite inférieure de partition : Indiquez si vous souhaitez filtrer le contenu par rapport à la colonne de partition pour récupérer uniquement les données entre les plages inférieure et supérieure.

Lors de l’exécution, le service remplace ?AdfRangePartitionColumnName, ?AdfRangePartitionUpbound et ?AdfRangePartitionLowbound par le nom réel de la colonne et les plages de valeurs de chaque partition et les envoie à Teradata.
Par exemple, si votre colonne de partition « ID » est définie sur une limite inférieure de 1 et une limite supérieure de 80, avec une copie en parallèle définie sur 4, le service récupère les données via 4 partitions. Les ID sont inclus entre [1,20], [21, 40], [41, 60] et [61, 80], respectivement.

Exemple : requête avec partition par hachage

"source": {
    "type": "TeradataSource",
    "query": "SELECT * FROM <TABLENAME> WHERE ?AdfHashPartitionCondition AND <your_additional_where_clause>",
    "partitionOption": "Hash",
    "partitionSettings": {
        "partitionColumnName": "<hash_partition_column_name>"
    }
}

Exemple : requête avec partition dynamique par spécification de plages de valeurs

"source": {
    "type": "TeradataSource",
    "query": "SELECT * FROM <TABLENAME> WHERE ?AdfRangePartitionColumnName <= ?AdfRangePartitionUpbound AND ?AdfRangePartitionColumnName >= ?AdfRangePartitionLowbound AND <your_additional_where_clause>",
    "partitionOption": "DynamicRange",
    "partitionSettings": {
        "partitionColumnName": "<dynamic_range_partition_column_name>",
        "partitionUpperBound": "<upper_value_of_partition_column>",
        "partitionLowerBound": "<lower_value_of_partition_column>"
    }
}

Mappage de type de données pour Teradata

Lorsque vous copiez des données à partir de Teradata, les mappages suivants s’appliquent à partir des types de données de Teradata aux types de données internes utilisés par 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 de données Teradata Type de données de service intermédiaire
BigInt Int64
Objet blob Byte[]
Byte Byte[]
ByteInt Int16
Char String
Clob String
Date DateTime
Decimal Decimal
Double Double
Graphic Non pris en charge. Appliquer un cast explicite dans la requête source.
Integer Int32
Interval Day Non pris en charge. Appliquer un cast explicite dans la requête source.
Interval Day To Hour Non pris en charge. Appliquer un cast explicite dans la requête source.
Interval Day To Minute Non pris en charge. Appliquer un cast explicite dans la requête source.
Interval Day To Second Non pris en charge. Appliquer un cast explicite dans la requête source.
Interval Hour Non pris en charge. Appliquer un cast explicite dans la requête source.
Interval Hour To Minute Non pris en charge. Appliquer un cast explicite dans la requête source.
Interval Hour To Second Non pris en charge. Appliquer un cast explicite dans la requête source.
Interval Minute Non pris en charge. Appliquer un cast explicite dans la requête source.
Interval Minute To Second Non pris en charge. Appliquer un cast explicite dans la requête source.
Interval Month Non pris en charge. Appliquer un cast explicite dans la requête source.
Interval Second Non pris en charge. Appliquer un cast explicite dans la requête source.
Interval Year Non pris en charge. Appliquer un cast explicite dans la requête source.
Interval Year To Month Non pris en charge. Appliquer un cast explicite dans la requête source.
Number Double
Période (date) Non pris en charge. Appliquer un cast explicite dans la requête source.
Période (heure) Non pris en charge. Appliquer un cast explicite dans la requête source.
Période (heure avec fuseau horaire) Non pris en charge. Appliquer un cast explicite dans la requête source.
Période (timestamp) Non pris en charge. Appliquer un cast explicite dans la requête source.
Période (timestamp avec fuseau horaire) Non pris en charge. Appliquer un cast explicite dans la requête source.
SmallInt Int16
Temps TimeSpan
Time With Time Zone TimeSpan
Timestamp DateTime
Timestamp With Time Zone DateTime
VarByte Byte[]
VarChar String
VarGraphic Non pris en charge. Appliquer un cast explicite dans la requête source.
Xml Non pris en charge. Appliquer un cast explicite dans la requête source.

Propriétés de l’activité Lookup

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

Consultez les magasins de données pris en charge pour obtenir la liste des sources et magasins de données pris en charge en tant que récepteurs par l’activité de copie.