0 / 0
Go back to the English version of the documentation
Hive表中的 STRING 数据类型在Data Virtualization中被分配为 "CLOB数据类型
Last updated: 2024年11月26日
Hive表中的 STRING 数据类型在Data Virtualization中被分配为 CLOB 数据类型

在 "Hive数据源中虚拟表时,当数据超过最大字符串长度时,"Data Virtualization会将类型为 "STRING的数据转换为类型为 "CLOB的数据,而不是类型为 "Varchar的数据。

症状

当您虚拟化包含超过缺省最大字符串长度 (MaxStringSize) 的数据类型 STRINGHive 表时,该列的数据类型将转换为 CLOB

Hive没有给出 "STRING类型的最大长度;因此,Data Virtualization以特定长度进行虚拟化,以避免截断。 但是,您可以调整最大长度。

以下示例来自具有字符串的 Hive 表,您可以在其中将列类型调整为适合聚集的长度。

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.
由于 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

解决问题

您可以更改导致失败的列,以将其大小减小到可用于聚集的值。 在以下示例中,将使用 VARCHAR(200) ,但您可以选择适合最大数据长度的内容。
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.
Generative AI search and answer
These answers are generated by a large language model in watsonx.ai based on content from the product documentation. Learn more