0 / 0
資料の 英語版 に戻る
Data Virtualizationで、仮想化されたフラットファイルに対するクエリが失敗し、結果が正しくない
最終更新: 2024年11月26日
Data Virtualizationで、仮想化されたフラットファイルに対するクエリが失敗し、結果が正しくない

リモート・エージェントを使用してアクセスされるフラット・ファイルを仮想化する場合に、特殊文字を持つ列に対して列タイプ変換が行われていると、一部の照会結果が誤っていることがあります。

症状

Data VirtualizationのExcelソースラッパーは、'Cloud Pak for Data44.0.22でアップグレードされ、サイズ無制限のスプレッドシートにアクセスできるようになった。 以前のリリースでは、Data Virtualizationは、例えば250,000以上のセルを含むような多数のデータを含むスプレッドシートや、例えば3MBを超えるような大きなファイル・サイズのスプレッドシートへのアクセスに失敗することがありました。 何らかの問題が発生した場合 (例えば、タイプや値が予期しないものである場合など)、以下の SQL API 呼び出しを使用して、新しいソース・ラッパーと古いソース・ラッパーを切り替えることができます。

  • GExcel という名前の以前の Excel ソース・ラッパーに切り替えるには、以下のコマンドを使用します。
    CALL DVSYS.SETCONFIGPROPERTY('EXCEL_SOURCE_WRAPPER_CLASS', 'com.ibm.db2j.GExcel', '', ?, ?)
  • 現在の Excel ソース・ラッパー である QExcel に切り替えるには、以下のコマンドを使用します。
    CALL DVSYS.SETCONFIGPROPERTY('EXCEL_SOURCE_WRAPPER_CLASS', 'com.ibm.db2j.QExcel', '', ?, ?)

例えば、ドル記号で始まる通貨の値は、元のプレビューでは、タイプ VARCHAR として推論されます。 しかし、その列が DECIMAL などの数値型に再入力されると、仮想化した場合に、仮想テーブルに対する照会で、その列に誤った NULL セルが含まれます。

例えば、照会では以下の結果が示されます。
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.

問題の解決

この問題を回避するには、以下の手順を実行します。

  1. 以下の SQL 照会を実行して、変更する必要があるエージェント NODE_NAME および PROPERTY を見つけます。 <your file name> は、仮想化されたファイルの名前に置き換えてください。
    select NODE_NAME, REGEXP_REPLACE( id, '_ARGS$', '_VTI' )  PROPERTY from dvsys.listconfig where id like 'VTF_%_ARGS' and def like  '%<your file name>%'
  2. 以下の SQL 照会を実行して、このスプレッドシートにアクセスするための GExcel 実装を使用し、タイプを正しく変換できるようにします。 <NODE_NAME> および <PROPERTY> を、ステップ 1で確認した値に置き換えます。
    CALL DVSYS.SETCONFIGPROPERTY('<PROPERTY>', 'com.ibm.db2j.GExcel', '<NODE_NAME>', ?, ?)
  3. 新しい実装に戻すには、ステップ 2から同じコマンドを再実行します。 GExcelQExcelに置き換えてください。