O tipo de dados STRING nas tabelas " Hive é atribuído ao tipo de dados " CLOB na Data Virtualization

Quando você virtualiza tabelas em uma fonte de dados " Hive, Data Virtualization de dados converte os dados do tipo " STRING para o tipo " CLOB em vez do tipo " Varchar quando eles excedem o comprimento máximo da cadeia.

Sintomas

Ao virtualizar uma tabela Hive que contém tipo de dado STRING que excede o comprimento máximo de sequência padrão (MaxStringSize), o tipo de dado da coluna é convertido para CLOB.

Hive não fornece um comprimento máximo para os tipos ' STRING; portanto, Data Virtualization virtualiza em um comprimento específico para evitar truncamento. No entanto, você pode ajustar o comprimento máximo.

O exemplo a seguir é de uma tabela Hive com sequências nas quais é possível ajustar o tipo de coluna a um comprimento adequado para agregação.

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.
A consulta a seguir falha por causa do tipo de dados CLOB.
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

Resolvendo o problema

Você pode alterar a coluna que causa a falha na redução de seu tamanho para algo que pode ser usado na agregação. No exemplo a seguir, VARCHAR(200) é usado, mas é possível escolher o que é apropriado para o comprimento máximo dos dados.
alter nickname TESTDATA.BASIC_STRING alter column "c_str" local type VARCHAR(200);
A mesma consulta agora é bem-sucedida.
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.