Go back to the English version of the documentationHive表中的 STRING 数据类型在Data Virtualization中被分配为 "CLOB数据类型
Hive表中的 STRING 数据类型在Data Virtualization中被分配为 CLOB 数据类型
Last updated: 2024年11月26日
在 "Hive数据源中虚拟表时,当数据超过最大字符串长度时,"Data Virtualization会将类型为 "STRING的数据转换为类型为 "CLOB的数据,而不是类型为 "Varchar的数据。
症状
当您虚拟化包含超过缺省最大字符串长度 (MaxStringSize) 的数据类型 STRING 的 Hive 表时,该列的数据类型将转换为 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.