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.
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.
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.
- 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>%'
- 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>', ?, ?)
- Pour revenir à la nouvelle implémentation, exécutez à nouveau la même commande à l'étape 2, en remplaçant
GExcel
parQExcel
.