HiveテーブルのSTRINGデータ型が、Data Virtualizationでは'CLOBデータ型に割り当てられる

最終更新: 2025年3月17日
HiveテーブルのSTRINGデータ型が、Data VirtualizationではCLOBデータ型に割り当てられる

Hiveデータソースのテーブルを仮想化する場合、最大文字列長を超えると、Data Virtualizationは'STRING型のデータを'Varchar型ではなく'CLOB型に変換します。

症状

デフォルトの最大ストリング長 (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.