Cuando virtualiza archivos sin formato a los que se accede utilizando un agente remoto, algunas consultas tienen resultados incorrectos en los casos en que se realizan conversiones de tipo de columna para columnas que tienen caracteres especiales.
Síntomas
En ' Cloud Pak for Data 4 4.0.2 se actualizó la envoltura de fuentes de Excel en Data Virtualization para permitir el acceso a hojas de cálculo de tamaño ilimitado. En versiones anteriores, Data Virtualization podía fallar al acceder a hojas de cálculo que contenían muchos datos, por ejemplo más de 250.000 celdas, o que tenían un archivo de gran tamaño, por ejemplo más de 3 MB, lo que ocurre fácilmente cuando un libro de trabajo contiene macros. Si encuentra algún problema (por ejemplo, tipos o valores inesperados), puede conmutar entre derivadores de origen nuevos y antiguos con las siguientes llamadas de API de SQL.
- Para conmutar al derivador de origen de Excel anterior denominado GExcel, utilice el mandato siguiente:
CALL DVSYS.SETCONFIGPROPERTY('EXCEL_SOURCE_WRAPPER_CLASS', 'com.ibm.db2j.GExcel', '', ?, ?)
- Para conmutar al derivador de origen de Excel actual denominado QExcel, utilice el mandato siguiente:
CALL DVSYS.SETCONFIGPROPERTY('EXCEL_SOURCE_WRAPPER_CLASS', 'com.ibm.db2j.QExcel', '', ?, ?)
Por ejemplo, los valores de moneda que empiezan por un símbolo de dólar se deducen como tipo VARCHAR en la vista previa original. Sin embargo, si esa columna se vuelve a escribir a un tipo numérico como DECIMAL, cuando se virtualiza, las consultas en la tabla virtual tienen celdas nulas erróneas en dicha columna.
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.
Resolución del problema
Para solucionar este problema, realice los pasos siguientes.
- Ejecute la siguiente consulta SQL para buscar el agente NODE_NAME y PROPERTY que deben modificarse, sustituyendo <your file name> por el nombre del archivo que se ha virtualizado.
select NODE_NAME, REGEXP_REPLACE( id, '_ARGS$', '_VTI' ) PROPERTY from dvsys.listconfig where id like 'VTF_%_ARGS' and def like '%<your file name>%'
- Ejecute la siguiente consulta SQL para utilizar la implementación de
GExcel
para acceder a esta hoja de cálculo para que los tipos se puedan convertir correctamente. Sustituya<NODE_NAME>
y<PROPERTY>
por los valores que ha encontrado en el paso 1.CALL DVSYS.SETCONFIGPROPERTY('<PROPERTY>', 'com.ibm.db2j.GExcel', '<NODE_NAME>', ?, ?)
- Para volver a la nueva implementación, vuelva a ejecutar el mismo mandato desde el paso 2, sustituyendo
GExcel
porQExcel
.