Die Virtualisierung einer Tabelle mit vielen Spalten oder langen Spaltennamen schlägt fehl in Data Virtualization

Die Virtualisierung einiger Tabellen in Data Virtualization kann mit einemVirtual table creation failedMeldung, während andere Tabellen im selben Schema erfolgreich virtualisiert werden.

Symptome

Einige Tabellen enthalten Spalten mit großen STRING- und CLOB-Daten. Die Virtualisierung der Tabelle durch Verringern der Spaltenbreite oder sogar durch Auswahl nur einer der Spalten schlägt jedoch mit einer Fehlermeldung fehl.

Virtual table creation failed:  <Response [500]>
'{"code":500,"message":"Error: CREATE OR REPLACE NICKNAME -- DB2 SQL Error: SQLCODE=-204, 
SQLSTATE=     , SQLERRMC=CASE, DRIVER=4.31.10"}\n'

Möglicherweise wird in den Protokollen auch eine Meldung angezeigt, die der folgenden Meldung ähnelt.

GDB_ERROR: ENGINE_GET_ROWS_FOR_CONFIG_ERROR: Unable to get rows for config request: TABLE_STATISTICS, 
cause: java.sql.SQLSyntaxErrorException: Table/View 'CASE' does not exist.

Die Data Virtualization Benutzeroberfläche kann keine Vorschau oder Virtualisierung anzeigen, selbst wenn die Tabelle nicht zwischengespeichert ist.

Ursachen

Das Problem tritt aufgrund der Größe der virtualisierten Tabellendefinition auf. Bei Data Virtualization der Vorbereitung der Virtualisierung wird ein 32-K-Puffer zugewiesen, um die Datendefinition der virtuellen Tabelle zu speichern. Wenn diese Datendefinition aufgrund vieler Spalten oder langer Spaltennamen größer als 32 K ist, wird die Datendefinition abgeschnitten und Sie sehen die MeldungGDB_ERROR: ENGINE_GET_ROWS_FOR_CONFIG_ERROR: Unable to get rows for config requestMeldung in den Protokollen.

Problemlösung

Um eine große Tabelle mit langen Spaltennamen zu virtualisieren und die meisten Abfragen für diese große Tabelle auszuführen, gehen Sie wie folgt vor.

  1. Stellen Sie den Remote-Schemafilter auf ein Schema ein, in dem die große Tabelle nicht vorhanden ist, damit sie nicht zwischengespeichert wird.
  2. Erstellen Sie die virtuelle Tabelle mit einer direkten CREATE OR REPLACE NICKNAME Anweisung, die die SOURCELIST Definitionsoption enthält, wie im folgenden Beispiel gezeigt. Der Wert SOURCELIST beschreibt den Remote-Speicherort der zu virtualisierenden Tabelle im Format <CID>:<RemoteSchema>. Die CID ist die Verbindungs-ID für die Quelle und kann in den Quellendetails auf der Seite „Datenquellen“ oder im Ergebnis der select * from dvsys.listrdbc Abfrage gefunden werden.
    /* IBM_DVSYS */ CREATE OR REPLACE NICKNAME "ADMIN"."VERY_LARGE_TABLE" for QPLEX.gaiandb."VERY_LARGE_TABLE"
        ( 
            VERY_LONG_COLUMN_IDENTIFIER1,
            VERY_LONG_COLUMN_IDENTIFIER2,
            VERY_LONG_COLUMN_IDENTIFIER3,
            ...
            VERY_LONG_COLUMN_IDENTIFIER999,
            VERY_LONG_COLUMN_IDENTIFIER1000
    ) OPTIONS(SOURCELIST 'DB210000:DRV');
    
    Ein Beispiel für einen SQL-Befehl zum Erstellen einer großen virtuellen Tabelle.
  3. Abfrage einzelner Spalten der großen virtuellen Tabelle.

    Ein Beispiel für eine SQL-Anweisung zum Abfragen einer großen Tabelle.

  4. Führen Sie Aggregationen und die meisten anderen Abfragen aus.
    Hinweis:

    Sie können nicht alle Spalten für die große Tabelle mit einer SELECT * Anweisung auswählen. Es wird eine Fehlermeldung angezeigt, die der folgenden Meldung ähnelt.

    SQL5105N  The statement failed because a Big SQL component encountered an 
    error.  Component receiving the error: "DV-FMP".  Component returning the 
    error: "Virtualization Connector".  Log entry identifier: "GAI-001-NA".  
    Reason: "".  SQLSTATE=58040