0 / 0
Retourner à la version anglaise de la documentation
Les requêtes sur les fichiers plats virtualisés échouent avec des résultats incorrects dans Data Virtualization
Dernière mise à jour : 26 nov. 2024
Les requêtes sur les fichiers plats virtualisés échouent avec des résultats incorrects dans Data Virtualization

Lorsque vous virtualisez des fichiers plats auxquels on accède à l'aide d'un agent distant, certaines requêtes donnent des résultats incorrects dans les cas où des conversions de type de colonne sont effectuées pour des colonnes comportant des caractères spéciaux.

Symptômes

Le wrapper source Excel dans Data Virtualization a été mis à jour dans 'Cloud Pak for Data 4 4.0.2 pour permettre l'accès à des feuilles de calcul de taille illimitée. Dans les versions précédentes, Data Virtualization pouvait ne pas accéder aux feuilles de calcul contenant de nombreuses données, par exemple plus de 250 000 cellules, ou ayant une taille de fichier importante, par exemple plus de 3 Mo, ce qui arrive facilement lorsqu'un classeur contient des macros. Si vous rencontrez des problèmes (par exemple, des types ou des valeurs inattendus), vous pouvez basculer entre les nouveaux et les anciens encapsuleurs de source avec les appels d'API SQL suivants.

  • Pour passer à l'encapsuleur de source Excel précédent (GExcel), utilisez la commande suivante :
    CALL DVSYS.SETCONFIGPROPERTY('EXCEL_SOURCE_WRAPPER_CLASS', 'com.ibm.db2j.GExcel', '', ?, ?)
  • Pour passer à l'encapsuleur de source Excel actuel (QExcel), utilisez la commande suivante :
    CALL DVSYS.SETCONFIGPROPERTY('EXCEL_SOURCE_WRAPPER_CLASS', 'com.ibm.db2j.QExcel', '', ?, ?)

Par exemple, les valeurs des devises qui commencent par le symbole du dollar sont considérées comme de type VARCHAR dans l'aperçu d'origine. Cependant, si cette colonne est redéfinie en un type numérique tel que DECIMAL, lorsque vous virtualisez, les requêtes effectuées dans la table virtuelle comportent des cellules nulles erronées dans cette colonne.

Par exemple, la requête affiche les résultats suivants.
db2 => SELECT * FROM DV_TEST."TBL_XLS_TESTFORMULA2" WHERE IDNUM BETWEEN 980 AND 990
IDNUM       NAME                           GROSS      DED1     DED2     TDED     NET
----------- ------------------------------ ---------- -------- -------- -------- ----------
        980 Ahmad Kynett                            -        -        -        -          -
        981 Sherlock Spalton                        -        -        -        -          -
        982 Ira Gladtbach                           -        -        -        -          -
        983 Andrej Dumphy                           -        -        -        -          -
        984 Jeremie Fullicks                        -        -        -        -          -
        985 Costa Shambrook                         -        -        -        -          -
        986 Jacob Darell                            -        -        -        -          -
        987 Kevon Heineking                         -        -        -        -          -
        988 Sib MacTrusty                           -        -        -        -          -
        989 Angelique Wace                          -        -        -        -          -
        990 Lothario Kuschel                        -        -        -        -          -

  11 record(s) selected.
Cependant, la requête devrait renvoyer les résultats suivants.
db2 => SELECT * FROM DV_LOCAL."TBL_XLS_TESTFORMULA2" WHERE IDNUM BETWEEN 980 AND 990
IDNUM       NAME                           GROSS      DED1     DED2     TDED     NET
----------- ------------------------------ ---------- -------- -------- -------- ----------
        980 Ahmad Kynett                      4196.77   568.05   349.44   917.50    3279.27
        981 Sherlock Spalton                  4904.10   681.37   308.92   990.29    3913.81
        982 Ira Gladtbach                     3189.25   553.35   387.08   940.43    2248.81
        983 Andrej Dumphy                     4152.29   690.10   499.46  1189.56    2962.73
        984 Jeremie Fullicks                  2132.98   516.84   319.20   836.05    1296.93
        985 Costa Shambrook                   3058.66   525.03   363.98   889.01    2169.64
        986 Jacob Darell                      4247.33   687.88   376.42  1064.30    3183.02
        987 Kevon Heineking                   3437.73   588.29   464.82  1053.10    2384.62
        988 Sib MacTrusty                     2231.61   586.28   356.07   942.34    1289.26
        989 Angelique Wace                    3973.60   683.93   318.11  1002.04    2971.56
        990 Lothario Kuschel                  2785.71   512.24   314.47   826.71    1959.00

  11 record(s) selected.

Résolution du problème

Pour contourner ce problème, procédez comme suit.

  1. Exécutez la requête SQL suivante pour rechercher l'agent NODE_NAME et PROPERTY qui doivent être modifiés, en remplaçant <your file name> par le nom du fichier virtualisé.
    select NODE_NAME, REGEXP_REPLACE( id, '_ARGS$', '_VTI' )  PROPERTY from dvsys.listconfig where id like 'VTF_%_ARGS' and def like  '%<your file name>%'
  2. Exécutez la requête SQL suivante pour utiliser l'implémentation GExcel pour accéder à cette feuille de calcul afin que les types puissent être convertis correctement. Remplacez <NODE_NAME> et <PROPERTY> par les valeurs que vous avez trouvées à l'étape 1.
    CALL DVSYS.SETCONFIGPROPERTY('<PROPERTY>', 'com.ibm.db2j.GExcel', '<NODE_NAME>', ?, ?)
  3. Pour revenir à la nouvelle implémentation, exécutez à nouveau la même commande à l'étape 2, en remplaçant GExcel par QExcel.
Recherche et réponse à l'IA générative
Ces réponses sont générées par un modèle de langue de grande taille dans watsonx.ai en fonction du contenu de la documentation du produit. En savoir plus