Problemi noti con Oracle NoSQL Database Analytics Integrator

Possibile perdita di precisione con alcuni tipi di dati:

Oracle NoSQL Database Analytics Integrator recupera i dati dalle tabelle in Oracle NoSQL Database Cloud Service, li converte in formato Parquet, memorizza i dati Parquet nello storage degli oggetti e infine li trasferisce in una tabella in un database ADW. Per eseguire la conversione in formato Parquet, NoSQL Analytics Integrator utilizza le funzionalità fornite da Oracle NoSQL Database Migrator, che mappa i tipi di dati Oracle NoSQL ai tipi di confronto definiti dal sistema di tipo Parquet. Il mapping tra il sistema di tipi di database NoSQL e il sistema di tipo Parquet non è un mapping uno a uno completo. Per ulteriori dettagli, vedere Mapping dei tipi di dati da Oracle NoSQL a Parquet. In particolare, il sistema di tipo Parquet attualmente non definisce un tipo di dati numerico analogo al tipo NUMBER Oracle NoSQL; dove il tipo più grande definito da Parquet è il tipo DOPPIO Parquet. Pertanto, se una tabella NoSQL che deve essere elaborata da Oracle NoSQL Database Analytics Integrator è costituita da un campo di tipo NUMBER che contiene un valore così grande da non poter essere rappresentato come un Parquet DOPPIO, quindi una perdita di precisione è possibile quando tale valore viene convertito nel tipo Parquet DOPPIO; poiché tale valore verrà rappresentato in formato Parquet come +Infinito o -Infinito.

Il database ADW attualmente non gestisce tipi di campo JSON di lunghezza maggiore di 4000 byte:

Se la tabella creata in Oracle NoSQL Database Cloud Service contiene un campo (colonna) di tipo JSON e se il valore scritto in tale campo è un documento JSON con lunghezza superiore a 4000 byte in almeno una riga della tabella, quindi, sebbene Oracle NoSQL Database Analytics Integrator non abbia problemi a scrivere tali valori nello storage degli oggetti (in formato Parquet), il database ADW non elabora il documento JSON correttamente e visualizza null anziché il contenuto del documento. Sebbene il parametro di inizializzazione max_string_size del database ADW sia impostato su EXTENDED per impostazione predefinita, il meccanismo utilizzato dal database ADW per recuperare e visualizzare il valore Parquet corrispondente attualmente ignora le impostazioni EXTENDED e tenta di memorizzare il valore in un tipo VARCHAR2(4000) anziché VARCHAR2(32767); ciò fa sì che il valore venga troncato e venga visualizzato un valore nullo. Per ulteriori dettagli, consulta Oracle Database Reference - Limiti dei tipi di dati.

Esempio: creare una tabella myJsonTable con due campi, INTEGER e JSON. Si supponga di popolare la riga con id=1 con un documento JSON costituito da più di 4000 byte.

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

Quando si recupera il contenuto della riga con id=1, l'output dovrebbe essere il seguente:

SELECT * FROM myJsonTable WHERE id = '1';

id jsonField
1 (null)

Attività: finché ADW non risolve questo bug, è possibile risolvere manualmente il problema eseguendo le operazioni riportate di seguito dall'interfaccia SQL di Database Actions.

Alcuni clienti non gestiscono Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY e DOUBLE.NaN in modo corretto:

Se la tabella creata in Oracle NoSQL Database Cloud Service contiene un campo (colonna) di tipo DOPPIO e se il valore scritto in tale campo è Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY o DOUBLE.NaN (Not-a-Number) in almeno una riga della tabella, anche se Oracle NoSQL Database Analytics L'integratore non ha problemi a scrivere tali valori nello storage degli oggetti (in formato Parquet) e sebbene il database ADW non abbia problemi a recuperare e memorizzare tali valori, alcuni dei client utilizzati per analizzare tali valori potrebbero avere problemi a gestire e/o visualizzare tali valori non numerici. Ad esempio, quando si tenta di utilizzare l'interfaccia SQL di Oracle Cloud Database Actions o Oracle Analytics (Desktop o Cloud) per eseguire una query sulla tabella di database ADW, questo problema si manifesta in due modi.

Quando si utilizza il pulsante Esegui istruzione nell'interfaccia SQL di Database Actions (rappresentata da un cerchio verde contenente una freccia bianca) per eseguire una singola query SELECT nella tabella, sebbene la query sia effettivamente completata, i risultati della query non vengono mai visualizzati e il comando sembra bloccarsi.

Nota: quando si utilizza l'opzione Esegui istruzione nell'interfaccia SQL di Database Actions, la query viene completata piuttosto che bloccata quando nella finestra Risultato query dell'interfaccia viene visualizzato un menu a discesa denominato Scarica e viene visualizzato il tempo di esecuzione (anche se la rotellina sembra indicare che la query è sospesa).

Ci sono due modi per risolvere questo problema. In primo luogo, è possibile eseguire semplicemente la query come script. A tale scopo, selezionare la query nella finestra [Worksheet]* dello strumento, quindi fare clic sul pulsante Esegui script. Verranno visualizzati i risultati della query nella finestra Output script dello strumento; verranno visualizzati i valori Double.POSITIVE_INFINITY come stringa 'Infinity', Double.NEGATIVE_INFINITY come stringa '-Infinity' e i valori Double.NaN come stringa 'NaN'.

Un altro modo per risolvere il problema nell'interfaccia SQL di Database Actions è utilizzare l'istruzione di esecuzione per eseguire la query e quando viene visualizzato il menu a discesa Scarica nella query. Finestra Risultato (che indica che la query è stata completata), fare clic sul menu a discesa Scarica e fare clic sulla voce di menu JSON per esportare l'output della query come documento JSON. Dopo aver esportato i risultati della query, è possibile utilizzare il browser o l'editor scelto per esaminare i risultati della query.

D'altra parte, se si utilizza Oracle Analytics (strumento desktop o servizio cloud) per eseguire query sulla tabella, si verifica la seguente traccia degli errori:

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"

Non è necessario risolvere questo problema in Oracle Analytics.

Pertanto, finché l'interfaccia SQL di Database Actions e Oracle Analytics non risolvono il modo in cui gestiscono Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY e Double.NaN, è necessario tenere sempre presente se la tabella che si desidera analizzare è costituita da righe con uno o più di questi valori.

Argomenti correlati