Accéder au contenu principal Passer au contenu complémentaire

Déplacement de tables imbriquées

Qlik Talend Data Integration supporte l'opération déplacement de tables Oracle contenant des colonnes qui sont des tables imbriquées ou des types définis. Pour activer cette fonctionnalité, sélectionnez l'option Supporter les tables imbriquées dans les paramètres connecteur.

La tâche de données crée les tables cibles des tables imbriquées Oracle comme des tables ordinaires sans contrainte unique. Comme vous devrez très probablement joindre les tables parent et enfant pour obtenir des données significatives, il est important de créer manuellement un index non unique sur la colonne NESTED_TABLE_ID dans la table enfant cible. La colonne NESTED_TABLE_ID peut alors être utilisée dans la clause JOIN ON, avec la colonne parent correspondant au nom de la table enfant. En outre, la création d'un tel index améliorera les performances lorsque les données de la table enfant cible seront mises à jour/supprimées par la tâche de données.

Il est recommandé de configurer la tâche pour qu'elle s'arrête à la fin du Chargement complet. À la fin du Chargement complet, créez manuellement des index non uniques pour toutes les tables enfants déplacé sur la cible, puis reprenez la tâche.

Si une table imbriquée capturée est ajoutée à une table parente existante (capturée ou non), la tâche de données la traitera correctement, mais l'index non unique de la table cible correspondante ne sera pas créé. Notez que dans ce cas, si la table enfant cible devient extrêmement grande, les performances peuvent être affectées. Dans ce cas, il est recommandé d'arrêter la tâche, de créer l'index, puis de reprendre la tâche. Toutefois, avant de reprendre la tâche, nous vous recommandons de créer des vues qui permettront d'aplatir les tables déplacé. Ces vues doivent contenir des instructions JOIN correspondant à vos besoins d'aplatissement spécifiques, comme l'explique l'exemple ci-dessous.

Prérequis

Assurez-vous d'appliquer l'opération Déplacer aux tables parentes de toutes les tables imbriquées déplacé. Les tables parentes (les tables contenant la colonne de la table imbriquée) et les tables enfants (c'est-à-dire imbriquées) seront disponibles pour la sélection dans Qlik Talend Data Integration.

Types de tables imbriquées supportés

Les types de tables imbriqués suivants sont supportés :

  • Type de données
  • Objet défini par l'utilisateur

Limitations

  • Seul un niveau d'imbrication est supporté.
  • Qlik Talend Data Integration ne vérifie pas que les tables parent et enfant sont sélectionnées pour l'opération déplacement. Autrement dit, il est possible de sélectionner une table parent sans table enfant et vice versa.

Comment l'opération déplacé est-elle appliquée aux tables imbriquées ?

L'opération déplacé est appliquée aux tables parentes et imbriquées dans la cible comme suit :

  • La table parente est créée sur la cible de la même manière que la source, où chaque colonne imbriquée est définie comme RAW(16). Sur chaque ligne de la table parente, cette colonne contiendra la même valeur que celle des lignes imbriquées de la table enfant correspondante dans la colonne NESTED_TABLE_ID.

  • La table enfant est créée à l'identique de la source, mais avec une colonne NESTED_TABLE_ID supplémentaire, comme indiqué précédemment.

Exemple d'instruction JOIN

Supposons qu'il existe les définitions suivantes dans la source Oracle :

  • CREATE OR REPLACE TYPE my_tab_t AS TABLE OF VARCHAR2(30);
  • CREATE TABLE my_parent_table (id NUMBER PRIMARY KEY, col1 my_tab_t) NESTED TABLE col1 STORE AS col1_tab;

Dans ce cas, la tâche de données créera généralement deux tables cibles comme suit :

  • CREATE TABLE my_parent_table (id NUMBER PRIMARY KEY, col1 RAW(16));
  • CREATE TABLE col1_tab(nested_table_id RAW(16), column_value VARCHAR2(30));

L'instruction JOIN permettant d'aplatir les deux tables cibles pourrait être définie comme suit :

  • Select id, column_value from my_parent_table LEFT OUTER JOIN col1_tab child ON child.nested_table_id = parent.col1;
Note InformationsLEFT OUTER JOIN doit être utilisé si la table parente contient des enregistrements qui n'existent pas dans la table enfant.

Cette page vous a-t-elle aidé ?

Si vous rencontrez des problèmes sur cette page ou dans son contenu – une faute de frappe, une étape manquante ou une erreur technique – faites-le-nous savoir.