Quando si virtualizzano tabelle in un'origine dati 'Hive, Data Virtualization converte i dati di tipo 'STRING in tipo 'CLOB anziché 'Varchar quando superano la lunghezza massima della stringa.
Sintomi
Quando si virtualizza una tabella Hive contenente il tipo di dati STRING che supera la lunghezza massima della stringa predefinita (MaxStringSize), il tipo di dati della colonna viene convertito in CLOB.
Hive non fornisce una lunghezza massima per i tipi 'STRING; pertanto, Data Virtualization virtualizza a una lunghezza specifica per evitare il troncamento. Tuttavia, è possibile regolare la lunghezza massima.
Il seguente esempio proviene da una tabella Hive con stringhe in cui è possibile modificare il tipo di colonna in una lunghezza adatta per l'aggregazione.
describe table TESTDATA.BASIC_STRING;
Data type Column
Column name schema Data type name Length Scale Nulls
------------------------------- --------- ------------------- ---------- ----- ------
c1 SYSIBM INTEGER 4 0 Yes
c_chr5 SYSIBM CHARACTER 5 0 Yes
c_vchr10 SYSIBM VARCHAR 10 0 Yes
c_str SYSIBM CLOB 65535 0 Yes
4 record(s) selected.
select "c_str", sum("c1") from TESTDATA.BASIC_STRING group by "c_str";
SQL0134N Improper use of a string column, host variable, constant, or function "c_str". SQLSTATE=42907
Risoluzione del problema
VARCHAR(200)
, ma è possibile scegliere ciò che è appropriato per la lunghezza massima dei dati.alter nickname TESTDATA.BASIC_STRING alter column "c_str" local type VARCHAR(200);
select "c_str", sum("c1") from TESTDATA.BASIC_STRING group by "c_str";
c_str 2
------------------------------------------------------------------------------------------------------------ ---------------
112
382
something a little longer to test string, where we do support pushdown for aggregation 244
a 126
9995-12-31 23:59:59.999999 124
A STRING 118
- 114
0005-01-01 00:00:00.000001 122
8 record(s) selected.