Bekannte Probleme mit Oracle NoSQL Database Analytics-Integrator

Möglicher Genauigkeitsverlust bei einigen Datentypen:

Oracle NoSQL Database Analytics Integrator ruft Daten aus Tabellen in Oracle NoSQL Database Cloud Service ab, konvertiert diese Daten in das Parquet-Format, speichert die Parquet-Daten in Object Storage und überträgt diese Daten schließlich in eine Tabelle in einer ADW-Datenbank. Um die Konvertierung in das Parquet-Format auszuführen, verwendet der NoSQL Analytics-Integrator Funktionen des Oracle NoSQL Database-Migrators. Dieser ordnet Oracle NoSQL-Datentypen vergleichbaren Typen zu, die vom Parquet-System definiert werden. Die Zuordnung zwischen dem NoSQL-Datenbanksystem und dem Parquet-System ist keine vollständige Eins-zu-Eins-Zuordnung. Weitere Informationen finden Sie unter Zuordnung von Oracle NoSQL zu Parquet-Datentypen. Insbesondere definiert das System vom Typ "Parkett" derzeit keinen numerischen Datentyp, der dem Typ "Oracle NoSQL NUMBER" entspricht. Dabei ist der größte von "Parkett" definierte Typ der Typ "Parkett DOPPEL". Wenn also eine vom Oracle NoSQL Database Analytics Integrator zu verarbeitende NoSQL-Tabelle aus einem Feld des Typs NUMBER besteht, das einen so großen Wert enthält, dass er nicht als ein Feld dargestellt werden kann Parquet DOUBLE, dann ist ein Verlust der Genauigkeit möglich, wenn dieser Wert in den Parquet DOUBLE-Typ konvertiert wird; da dieser Wert im Parquet-Format als +Infinity oder -Infinity dargestellt wird.

ADW-Datenbank verarbeitet derzeit keine JSON-Feldtypen mit einer Länge von 4000 Byte:

Wenn die Tabelle, die Sie in Oracle NoSQL Database Cloud Service erstellen, ein Feld (Spalte) vom Typ JSON enthält und der in dieses Feld geschriebene Wert ein JSON-Dokument mit einer Länge von mehr als 4000 Byte in mindestens einer Zeile der Tabelle ist, Obwohl der Oracle NoSQL Database Analytics Integrator kein Problem beim Schreiben solcher Werte in den Object Storage (im Parquet-Format) hat, verarbeitet die ADW-Datenbank das JSON-Dokument nicht korrekt. Sie zeigt null anstelle des Dokumentinhalts an. Obwohl der Initialisierungsparameter max_string_size der ADW-Datenbank standardmäßig auf EXTENDED gesetzt ist, ignoriert der von der ADW-Datenbank verwendete Mechanismus zum Abrufen und Anzeigen des entsprechenden Parquet-Wertes derzeit die EXTENDED-Einstellungen und versucht, den Wert in einem VARCHAR2(4000)-Typ anstelle von VARCHAR2(32767) zu speichern. Dadurch wird der Wert abgeschnitten und Null angezeigt. Weitere Informationen finden Sie in der Oracle Database-Referenz – Limits für Datentypen.

Beispiel: Erstellen Sie eine Tabelle myJsonTable mit zwei Feldern, einem INTEGER und einem JSON. Angenommen, Sie füllen die Zeile mit id=1 mit einem JSON-Dokument, das aus mehr als 4000 Byte besteht.

CREATE TABLE IF NOT EXISTS myJsonTable (id INTEGER,
jsonField JSON, PRIMARY KEY (idField)) USING TTL 1 days;

Wenn Sie den Inhalt der Zeile mit id=1 abrufen, sollte eine Ausgabe wie die folgende angezeigt werden:

SELECT * FROM myJsonTable WHERE id = '1';

id jsonField
1 (null)

Problemumgehung: Bis ADW diesen Bug behebt, können Sie das Problem manuell umgehen, indem Sie über die SQL-Schnittstelle von Database Actions Folgendes ausführen.

Einige Clients behandeln Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY und DOUBLE.NaN nicht korrekt:

Wenn die Tabelle, die Sie in Oracle NoSQL Database Cloud Service erstellen, ein Feld (Spalte) vom Typ DOUBLE enthält und wenn der in dieses Feld geschriebene Wert Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY oder DOUBLE.NaN (Not-a-Number) in mindestens einer Zeile der Tabelle lautet, obwohl Oracle NoSQL Database Analytics Der Integrator hat kein Problem damit, solche Werte in Object Storage (im Parquet-Format) zu schreiben. Obwohl die ADW-Datenbank beim Abrufen und Speichern dieser Werte kein Problem hat, können einige der Clients, die zur Analyse dieser Werte verwendet werden, Probleme bei der Verarbeitung und/oder Anzeige solcher nicht numerischer Werte haben. Beispiel: Wenn Sie versuchen, entweder die Oracle Cloud Database Actions-SQL-Schnittstelle oder Oracle Analytics (Desktop oder Cloud) zum Abfragen der ADW-Datenbanktabelle zu verwenden, gibt es zwei Möglichkeiten, dieses Problem zu lösen.

Wenn Sie die Schaltfläche Anweisung ausführen auf der SQL-Oberfläche von Database Actions (dargestellt durch einen grünen Kreis mit einem weißen Pfeil) verwenden, um eine einzelne SELECT-Abfrage für die Tabelle auszuführen, obwohl die Abfrage tatsächlich abgeschlossen ist, werden die Ergebnisse der Abfrage nie angezeigt, und der Befehl scheint zu hängen.

Hinweis: Bei Verwendung der Option Anweisung ausführen in der SQL-Schnittstelle von Database Actions kann festgestellt werden, dass die Abfrage abgeschlossen ist und nicht hängt, wenn das Fenster Abfrageergebnis dieser Schnittstelle schließlich ein Dropdown-Menü mit der Bezeichnung Herunterladen anzeigt und die Ausführungszeit anzeigt (auch wenn das Drehrad anzeigt, dass die Abfrage hängt).

Es gibt zwei Möglichkeiten, um dieses Problem zu umgehen. Zunächst können Sie die Abfrage einfach als Skript ausführen. Wählen Sie dazu die Abfrage im Fenster [Arbeitsblatt]* des Tools aus, und klicken Sie auf die Schaltfläche Skript ausführen. Dadurch werden die Ergebnisse der Abfrage im Fenster Skriptausgabe des Tools angezeigt. Dabei werden alle Double.POSITIVE_INFINITY-Werte als Zeichenfolge "Infinity", Double.NEGATIVE_INFINITY-Werte als Zeichenfolge "-Infinity" und alle Double.NaN-Werte als Zeichenfolge "NaN" angezeigt.

Another way to work around the issue in the Database Actions SQL Interface is to use the Run Statement to execute the query, and when the Download dropdown menu appears in the Query Result window (indicating the query has completed), click on the Download dropdown menu and click on the menu item labeled JSON to export the output of the query as a JSON document. Nachdem Sie die Abfrageergebnisse exportiert haben, können Sie die Abfrageergebnisse in Ihrem Browser oder Editor Ihrer Wahl prüfen.

Wenn Sie hingegen Oracle Analytics (Desktoptool oder Cloud-Service) zum Abfragen der Tabelle verwenden, erfolgt das folgende Fehlertrace:

Odbc driver returned an error (SQLExecDirectW).
State: HY000. Code.10058. [NQODBC][SQL_STATE:HY000]
[nQSError:10058] A general error has occurred.
State: HY000. Code: 43113. [nQSError: 43113] Message returned from OBIS.
State: HY000. Code: 43119. [nQSError: 43119] Query Failed.
State: HY000. Code: 17001. [nQSError: 17001] Oracle Error code: 1722,
message: ORA-01722: invalid number at OCI call OCIStmtFetch.
State: HY000. Code: 17012. [nQSError: 17012] Bulk fetch failed. (HY000)
SQL Issued:
SET VARIABLE DISABLE_CACHE_SEED=1,
DISABLE_XSA_CACHE_SEED=1,
ENABLE_DIMENSIONALITY=1;
SELECT 0 s_0, XSA('weblogic'.'1cdbf90a-570e-4ebb-946b-5510da1b5f76').
"input"."Data"."XD" s_1,
XSA('weblogic'.'1cdbf90a-570e-4ebb-946b-5510da1b5f76').
"input"."Data"."XTCTYPE" s_2,
XSA('weblogic'.'1cdbf90a-570e-4ebb-946b-5510da1b5f76').
"input"."Data"."XTESTCASE" s_3,
FROM XSA('weblogic'.'1cdbf90a-570e-4ebb-946b-5510da1b5f76').input."Data"

Für dieses Problem gibt es keine Problemumgehung in Oracle Analytics.

Wenn also die SQL-Schnittstelle von Database Actions und Oracle Analytics die Art und Weise, wie sie mit Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY und Double.NaN umgehen, berücksichtigen, ob die zu analysierende Tabelle aus Zeilen mit einem oder mehreren dieser Werte besteht.

Verwandte Themen