Migration de Teradata vers BigQuery : présentation

Ce document vous aide à comprendre les décisions à prendre lorsque vous utilisez le service de transfert de données BigQuery pour migrer votre schéma et vos données de Teradata vers BigQuery.

La migration du schéma et des données est généralement l'une des étapes nécessaires au déplacement d'un entrepôt de données vers BigQuery depuis autre plate-forme. Pour obtenir une description du processus de migration de bout en bout, consultez la page Présentation : Migrer des entrepôts de données vers BigQuery.

Vous pouvez également utiliser la traduction SQL par lot pour migrer vos scripts SQL de façon groupée, ou la traduction SQL interactive pour traduire des requêtes ad hoc. Le langage SQL Teradata est entièrement compatible avec les deux services de traduction SQL.

Présentation

Vous pouvez utiliser le service de transfert de données BigQuery avec un agent de migration spécial pour copier votre schéma et vos données de Teradata vers BigQuery. L'agent de migration se connecte à votre entrepôt de données local et communique avec le service de transfert de données BigQuery pour copier les tables de votre entrepôt de données vers BigQuery.

Les étapes suivantes décrivent le workflow du processus de migration :

  1. Télécharger l'agent de migration.
  2. Configurer un transfert dans le service de transfert de données BigQuery.
  3. Exécuter la tâche de transfert pour copier le schéma et les données de votre entrepôt de données vers BigQuery.
  4. Facultatif. Surveiller les jobs de transfert à l'aide de la console Google Cloud.

Configuration d'un job de transfert

Vous pouvez configurer une tâche de transfert de façon à répondre au mieux à vos besoins. Avant de configurer un transfert de données de Teradata vers BigQuery, examinez les options de configuration décrites dans les sections suivantes et déterminez quels paramètres utiliser. En fonction des paramètres que vous choisissez, vous devrez peut-être remplir certaines conditions préalables avant de démarrer la tâche de transfert.

Pour la plupart des systèmes, en particulier ceux comportant des tables volumineuses, vous pouvez obtenir des performances optimales en procédant comme suit :

  1. Partitionnez vos tables Teradata.
  2. Utilisez Teradata Parallel Transporter (TPT) pour l'extraction.
  3. Créez un fichier de schéma personnalisé et configurez vos colonnes cibles de clustering et de partitionnement BigQuery.

L'agent de migration peut ainsi effectuer l'extraction partition par partition, ce qui est l'option la plus efficace.

Méthode d'extraction

Le service de transfert de données BigQuery propose deux méthodes d'extraction pour transférer des données de Teradata vers BigQuery :

  • Utiliser l'utilitaire teradata Parallel Transporter (TPT) tbuild. Il s'agit de l'approche recommandée. L'utilisation de TPT permet généralement d'accélérer l'extraction des données.

    Dans ce mode, l'agent de migration tente de calculer des lots d'extraction à l'aide de lignes réparties par partitions. Pour chaque lot, l'agent émet et exécute un script d'extraction TPT, générant un ensemble de fichiers délimités par des barres verticales. Il importe ensuite ces fichiers dans un bucket Cloud Storage, où ils sont utilisés par la tâche de transfert. Une fois les fichiers importés dans Cloud Storage, l'agent de migration les a supprimés du système de fichiers local.

    Lorsque vous utilisez l'extraction TPT sans colonne de partitionnement, l'intégralité de votre table est extraite. Lorsque vous utilisez l'extraction TPT avec une colonne de partitionnement, l'agent extrait des ensembles de partitions.

    Dans ce mode, l'agent de migration ne limite pas la quantité d'espace qu'occupent les fichiers extraits sur le système de fichiers local. Assurez-vous que le système de fichiers local dispose d'un espace de stockage supérieur à la taille de votre plus grande partition ou de votre plus grande table, selon que vous spécifiez ou non une colonne de partitionnement.

  • Extraction à l'aide du pilote JDBC avec connexion FastExport. S'il existe des contraintes sur l'espace de stockage local disponible pour les fichiers extraits, ou si vous ne pouvez pas utiliser TPT pour une raison quelconque, utilisez cette méthode d'extraction.

    Dans ce mode, l'agent de migration extrait les tables dans une collection de fichiers AVRO sur le système de fichiers local. Il importe ensuite ces fichiers dans un bucket Cloud Storage, où ils sont utilisés par la tâche de transfert. Une fois les fichiers importés dans Cloud Storage, l'agent de migration les supprime du système de fichiers local.

    Dans ce mode, vous pouvez limiter la quantité d'espace utilisée par les fichiers AVRO sur le système de fichiers local. Si cette limite est dépassée, l'extraction est interrompue jusqu'à ce que l'espace de stockage soit libéré par l'agent de migration qui importe et supprime les fichiers AVRO existants.

Identification des schémas

Le service de transfert de données BigQuery fournit une détection automatique de schéma et une mise en correspondance des types de données lors d'un transfert de données de Teradata vers BigQuery. Vous pouvez éventuellement spécifier un fichier de schéma personnalisé à la place. Nous vous recommandons de personnaliser le schéma dans les situations suivantes :

  • Vous devez capturer des informations importantes sur une table, comme le partitionnement, qui seraient sinon perdues dans la migration.

    Par exemple, les transferts incrémentiels doivent comporter un fichier de schéma spécifié pour que les données des transferts ultérieurs puissent être correctement partitionnées lors de leur chargement dans BigQuery. En l'absence de fichier de schéma spécifié, à chaque exécution d'un transfert, le service de transfert de données BigQuery applique automatiquement un schéma de table en utilisant les données source en cours de transfert, et toutes les informations sur le partitionnement, le clustering, les clés primaires et le suivi des modifications sont perdues.

  • Vous devez modifier les noms des colonnes ou les types de données lors du transfert de données.

Fichier de schéma personnalisé

Un fichier de schéma personnalisé est un fichier JSON qui décrit des objets de base de données. Le schéma contient un ensemble de bases de données, chacune contenant un ensemble de tables, lesquelles contiennent chacune un ensemble de colonnes. Chaque objet comporte un champ originalName qui indique le nom d'objet dans Teradata, et un champ name qui indique le nom cible de l'objet dans BigQuery.

Les colonnes comportent en outre les champs suivants :

  • Un champ originalType qui indique le type de données de la colonne dans Teradata.
  • Un champ type qui indique le type de données cible pour la colonne dans BigQuery.
  • Un champ usageType pour capturer des informations sur la manière dont la colonne est utilisée par le système, par exemple en clustering ou partitionnement. Les types d'utilisation suivants sont pris en charge :

    • CLUSTERING : vous pouvez annoter jusqu'à quatre colonnes dans chaque table cible avec ce type d'utilisation. L'ordre des colonnes pour le clustering est déterminé en fonction de l'ordre dans lequel ils apparaissent dans le schéma personnalisé. Les colonnes que vous sélectionnez doivent respecter les contraintes de clustering dans BigQuery. Si un champ PARTITIONING est spécifié pour la même table, BigQuery utilise ces colonnes pour créer une table en cluster.
    • COMMIT_TIMESTAMP : vous ne pouvez annoter qu'une seule colonne dans chaque table cible avec ce type d'utilisation. Utilisez ce usageType pour identifier une colonne d'horodatage de mise à jour pour les mises à jour incrémentielles. Cette colonne permet d'extraire les lignes créées ou mises à jour depuis la dernière exécution de transfert. Ce type d'utilisation n'est possible qu'avec une colonne dont le type de données est TIMESTAMP ou DATE.
    • DEFAULT : vous pouvez annoter plusieurs colonnes dans une table cible avec ce type d'utilisation. Ce usageType indique que la colonne n'a pas d'utilisation particulière dans le système source. Il s'agit de la valeur par défaut.
    • PARTITIONING : vous ne pouvez annoter qu'une seule colonne dans chaque table cible avec ce type d'utilisation. Cette colonne est utilisée dans la définition de table partitionnée afin de contenir l'objet tables. Ce type d'utilisation n'est possible qu'avec une colonne dont le type de données est TIMESTAMP ou DATE.

Vous pouvez créer un fichier de schéma personnalisé manuellement, basé sur cet exemple, ou faire en sorte que l'agent de migration en génère un pour vous lors de l'initialisation de l'agent.

Exemple

Supposons que vous migrez une table Teradata appelée orders dans la base de données tpch avec la définition de table suivante :


CREATE SET TABLE TPCH.orders ,FALLBACK ,
     NO BEFORE JOURNAL,
     NO AFTER JOURNAL,
     CHECKSUM = DEFAULT,
     DEFAULT MERGEBLOCKRATIO,
     MAP = TD_MAP1
     (
      O_ORDERKEY INTEGER NOT NULL,
      O_CUSTKEY INTEGER NOT NULL,
      O_ORDERSTATUS CHAR(1) CHARACTER SET LATIN CASESPECIFIC NOT NULL,
      O_TOTALPRICE DECIMAL(15,2) NOT NULL,
      O_ORDERDATE DATE FORMAT 'yyyy-mm-dd' NOT NULL,
      O_ORDERPRIORITY CHAR(15) CHARACTER SET LATIN CASESPECIFIC NOT NULL,
      O_CLERK CHAR(15) CHARACTER SET LATIN CASESPECIFIC NOT NULL,
      O_SHIPPRIORITY INTEGER NOT NULL,
      O_COMMENT VARCHAR(79) CHARACTER SET LATIN CASESPECIFIC NOT NULL)
UNIQUE PRIMARY INDEX ( O_ORDERKEY );

Lors de la migration vers BigQuery, supposons que vous souhaitiez configurer le schéma avec les modifications suivantes :

  • Renommer la colonne O_CUSTKEY en O_CUSTOMERKEY.
  • Identifier O_ORDERDATE en tant que colonne de partitionnement.

Le schéma personnalisé permettant de configurer ces paramètres est le suivant :


{
  "databases": [
    {
      "name": "tpch",
      "originalName": "e2e_db",
      "tables": [
        {
          "name": "orders",
          "originalName": "orders",
          "columns": [
            {
              "name": "O_ORDERKEY",
              "originalName": "O_ORDERKEY",
              "type": "INT64",
              "originalType": "integer",
              "usageType": [
                "DEFAULT"
              ],
              "isRequired": true,
              "originalColumnLength": 4
            },
            {
              "name": "O_CUSTOMERKEY",
              "originalName": "O_CUSTKEY",
              "type": "INT64",
              "originalType": "integer",
              "usageType": [
                "DEFAULT"
              ],
              "isRequired": true,
              "originalColumnLength": 4
            },
            {
              "name": "O_ORDERSTATUS",
              "originalName": "O_ORDERSTATUS",
              "type": "STRING",
              "originalType": "character",
              "usageType": [
                "DEFAULT"
              ],
              "isRequired": true,
              "originalColumnLength": 1
            },
            {
              "name": "O_TOTALPRICE",
              "originalName": "O_TOTALPRICE",
              "type": "NUMERIC",
              "originalType": "decimal",
              "usageType": [
                "DEFAULT"
              ],
              "isRequired": true,
              "originalColumnLength": 8
            },
            {
              "name": "O_ORDERDATE",
              "originalName": "O_ORDERDATE",
              "type": "DATE",
              "originalType": "date",
              "usageType": [
                "PARTITIONING"
              ],
              "isRequired": true,
              "originalColumnLength": 4
            },
            {
              "name": "O_ORDERPRIORITY",
              "originalName": "O_ORDERPRIORITY",
              "type": "STRING",
              "originalType": "character",
              "usageType": [
                "DEFAULT"
              ],
              "isRequired": true,
              "originalColumnLength": 15
            },
            {
              "name": "O_CLERK",
              "originalName": "O_CLERK",
              "type": "STRING",
              "originalType": "character",
              "usageType": [
                "DEFAULT"
              ],
              "isRequired": true,
              "originalColumnLength": 15
            },
            {
              "name": "O_SHIPPRIORITY",
              "originalName": "O_SHIPPRIORITY",
              "type": "INT64",
              "originalType": "integer",
              "usageType": [
                "DEFAULT"
              ],
              "isRequired": true,
              "originalColumnLength": 4
            },
            {
              "name": "O_COMMENT",
              "originalName": "O_COMMENT",
              "type": "STRING",
              "originalType": "varchar",
              "usageType": [
                "DEFAULT"
              ],
              "isRequired": true,
              "originalColumnLength": 79
            }
          ]
        }
      ]
    }
  ]
}

Transferts à la demande ou incrémentiels

Lors de la migration de données d'une instance de base de données Teradata vers BigQuery, le service de transfert de données BigQuery assure aussi bien les transferts de données ponctuels (transferts à la demande) que les transferts récurrents et périodiques de lignes nouvelles et mises à jour (transferts incrémentiels) (bêta). Les modes de transfert à la demande ou incrémentiel sont définis dans les options de planification à l'étape Configurer un transfert.

  • Transfert à la demande : utilisez ce mode pour effectuer la migration initiale du schéma et des données de Teradata vers BigQuery.

  • Transfert incrémentiel : utilisez ce mode pour migrer régulièrement les données nouvelles et modifiées de Teradata vers BigQuery.

    • Cette méthode nécessite de personnaliser votre schéma pour annoter les colonnes avec le type d'utilisation COMMIT_TIMESTAMP.
    • Certaines conditions s'appliquent lors de la configuration de transferts incrémentiels.

Transferts incrémentiels

Dans les transferts incrémentiels, le premier transfert crée toujours un instantané de table dans BigQuery. Tous les transferts ultérieurs capturent, transfèrent et ajoutent les données nouvelles et modifiées à la table existante dans BigQuery. Cela signifie que pour les lignes modifiées, la table BigQuery peut contenir des lignes en double avec des valeurs anciennes et nouvelles.

Pour chaque exécution de transfert, un horodatage de l'exécution du transfert est enregistré. Pour chaque exécution de transfert suivante, un agent reçoit l'horodatage d'une exécution de transfert précédente (T1) et l'horodatage du début de l'exécution de transfert (T2).

Pour chaque transfert après l'exécution initiale, l'agent de migration extrait les données à l'aide de la logique de table suivante :

  • Si un objet de table dans un fichier de schéma ne possède pas de colonne avec un type d'utilisation COMMIT_TIMESTAMP, la table est ignorée.
  • Si une table possède une colonne avec le type d'utilisation COMMIT_TIMESTAMP, toutes les lignes dont l'horodatage est compris entre T1 et T2 sont extraites et ajoutées à la table existante dans BigQuery.

Le tableau suivant décrit comment l'agent de migration gère les opérations LDD (langage de définition de données) et LMD (langage de manipulation de données) dans les transferts incrémentiels.

Fonctionnement de Teradata Type Compatibilité de Teradata avec BigQuery
CREATE LDD Un nouvel instantané complet de la table est créé dans BigQuery.
DROP LDD Incompatible
ALTER (RENAME) LDD Un nouvel instantané complet de la table renommée est créé dans BigQuery. L'instantané précédent n'est pas supprimé de BigQuery. L'utilisateur n'est pas informé de la table renommée.
INSERT LMD Les nouvelles lignes sont ajoutées à la table BigQuery.
UPDATE LMD Les lignes ne sont pas modifiées. Les lignes sont ajoutées à la table BigQuery en tant que nouvelles lignes, comme dans une opération INSERT. Les lignes des transferts précédents ne sont pas mises à jour ou supprimées.
MERGE LMD Non compatible Consultez plutôt INSERT, UPDATE et DELETE.
DELETE LMD Incompatible

Considérations relatives aux zones

Votre bucket Cloud Storage doit se trouver dans une région ou un emplacement multirégional compatible avec la région ou l'emplacement multirégional de l'ensemble de données de destination dans BigQuery.

  • Si votre ensemble de données BigQuery se trouve dans une zone multirégionale, le bucket Cloud Storage contenant les données que vous transférez doit se trouver dans la même zone multirégionale ou dans un emplacement inclus dans la zone multirégionale. Par exemple, si votre ensemble de données BigQuery se trouve dans la zone multirégionale "EU", le bucket Cloud Storage peut être situé dans la région de Belgique "europe-west1", qui se trouve dans l'Union européenne.
  • Si votre ensemble de données se trouve dans une région, votre bucket Cloud Storage doit se situer dans la même région. Par exemple, si votre ensemble de données se trouve dans la région "asia-northeast1" à Tokyo, le bucket Cloud Storage ne peut pas se situer dans la zone multirégionale "ASIA".

Pour plus d'informations sur les transferts et les régions, consultez la page Emplacement des données et transferts.

Tarifs

Le transfert de données avec BigQuery n'est soumis à aucun frais. L'utilisation de ce service peut toutefois engendrer des coûts hors de Google, notamment les frais liés au transfert de données sortantes à partir de la plate-forme.

  • L'extraction des données, leur importation dans un bucket Cloud Storage et leur chargement dans BigQuery sont gratuits.
  • Les données ne sont pas automatiquement supprimées de votre bucket Cloud Storage après leur importation dans BigQuery. Pensez à les supprimer du bucket pour ne pas avoir à payer de coûts de stockage supplémentaires. Consultez la page sur les tarifs de Cloud Storage.
  • Les quotas et limites standards de BigQuery liés aux tâches de chargement s'appliquent.
  • Une fois les données transférées vers BigQuery, les tarifs standards du stockage et des requêtes BigQuery s'appliquent.
  • Consultez la page Tarifs concernant les transferts pour plus de détails.

Limites

  • Les transferts uniques à la demande sont entièrement compatibles. Les transferts incrémentiels sont disponibles en version bêta. Les opérations LDD/LMD dans les transferts incrémentiels sont partiellement compatibles.
  • Lors du transfert de données, les données sont extraites dans un répertoire du système de fichiers local. Assurez-vous de disposer d'un espace de stockage suffisant.
    • Lorsque vous utilisez le mode d'extraction FastExport, vous pouvez définir la quantité maximale d'espace de stockage nécessaire et la limite pleinement appliquée par l'agent de migration. Définissez le paramètre max-local-storage dans le fichier de configuration de l'agent de migration lorsque vous configurez un transfert de Teradata vers BigQuery.
    • Si vous utilisez la méthode d'extraction TPT, assurez-vous que le système de fichiers dispose d'un espace de stockage suffisant, plus grand que la plus grande partition de table de l'instance Teradata.
  • Le service de transfert de données BigQuery convertit automatiquement le schéma (si vous ne fournissez pas de fichier de schéma personnalisé) et transfère les données Teradata vers BigQuery. Les données sont mappées de Teradata vers les types BigQuery.
  • Les fichiers ne sont pas supprimés automatiquement de votre bucket Cloud Storage après leur chargement dans BigQuery. Pensez à supprimer les données de votre bucket Cloud Storage après leur chargement dans BigQuery afin d'éviter des frais de stockage supplémentaires. Consultez la page Tarifs.
  • La vitesse d'extraction est limitée par votre connexion JDBC.
  • Les données extraites de Teradata ne sont pas chiffrées. Prenez les mesures nécessaires pour restreindre l'accès aux fichiers extraits dans le système de fichiers local et assurez-vous que le bucket Cloud Storage est correctement sécurisé.
  • Les autres ressources de base de données, telles que les procédures stockées, les requêtes enregistrées, les vues et les fonctions définies par l'utilisateur, ne sont pas transférées et dépassent le cadre de ce service.

Étape suivante