0 / 0
Go back to the English version of the documentation
Zapytania dotyczące zwirtualizowanych plików tekstowych kończą się niepowodzeniem z niepoprawnymi wynikami w programie Watson Query
Last updated: 31 mar 2023
Zapytania dotyczące zwirtualizowanych plików tekstowych kończą się niepowodzeniem z niepoprawnymi wynikami w programie Watson Query .

W przypadku wirtualizowania plików tekstowych, do których dostęp jest uzyskiwany za pomocą agenta zdalnego, niektóre zapytania mają niepoprawne wyniki w przypadkach, w których konwersje typów kolumn są wykonywane dla kolumn, które mają znaki specjalne.

Objawy

Opakowanie źródłowe Excel zostało zaktualizowane, aby umożliwić dostęp do arkuszy kalkulacyjnych o nieograniczonej wielkości. Program Watson Query może nie mieć dostępu do arkuszy kalkulacyjnych, które zawierają wiele danych, na przykład większe niż 250 000 komórek, lub mają dużą wielkość pliku, na przykład większą niż 3 MB, co z łatwością zdarza się, gdy skoroszyt zawiera makra. Jeśli wystąpią jakiekolwiek problemy (na przykład nieoczekiwane typy lub wartości), można przełączać się między nowymi i starymi opakowaniami źródłowymi za pomocą następujących wywołań funkcji API języka SQL.

  • Aby przełączyć się do poprzedniego opakowania źródłowego programu Excel o nazwie GExcel, należy użyć następującej komendy:
    CALL DVSYS.SETCONFIGPROPERTY('EXCEL_SOURCE_WRAPPER_CLASS', 'com.ibm.db2j.GExcel', '', ?, ?)
  • Aby przełączyć się do bieżącego opakowania źródłowego programu Excel o nazwie QExcel, należy użyć następującej komendy:
    CALL DVSYS.SETCONFIGPROPERTY('EXCEL_SOURCE_WRAPPER_CLASS', 'com.ibm.db2j.QExcel', '', ?, ?)

Na przykład wartości walut, które rozpoczynają się od symbolu dolara, są traktowane jako typ VARCHAR w oryginalnym podglądzie. Jeśli jednak kolumna ta zostanie ponownie wpisana do typu liczbowego, takiego jak DECIMAL, podczas wirtualizacji zapytań względem tabeli wirtualnej będą miały błędne komórki o wartości NULL w tej kolumnie.

Na przykład zapytanie przedstawia następujące wyniki.
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.
Jednak zapytanie powinno zwrócić następujące wyniki.
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.

Rozwiązanie problemu

Aby obejmować ten problem, wykonaj następujące kroki.

  1. Uruchom następujące zapytanie SQL, aby znaleźć agenta NODE_NAME i PROPERTY , które mają zostać zmodyfikowane, zastępując < nazwa pliku > nazwą pliku, który został zwirtualizowany.
    select NODE_NAME, REGEXP_REPLACE( id, '_ARGS$', '_VTI' )  PROPERTY from dvsys.listconfig where id like 'VTF_%_ARGS' and def like  '%<your file name>%'
  2. Uruchom następujące zapytanie SQL, aby użyć implementacji GExcel w celu uzyskania dostępu do tego arkusza kalkulacyjnego, aby możliwe było poprawne przekształcanie typów. Zastąp wartości <NODE_NAME> i <PROPERTY> wartościami, które zostały znalezione w kroku 1.
    CALL DVSYS.SETCONFIGPROPERTY('<PROPERTY>', 'com.ibm.db2j.GExcel', '<NODE_NAME>', ?, ?)
  3. Aby powrócić do nowej implementacji, uruchom ponownie tę samą komendę z kroku 2, zastępując produkt GExcel przy użyciu produktu QExcel.
Generative AI search and answer
These answers are generated by a large language model in watsonx.ai based on content from the product documentation. Learn more