HiveテーブルのSTRINGデータ型が、Data Virtualizationでは'CLOBデータ型に割り当てられる
最終更新: 2025年3月17日
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.
トピックは役に立ちましたか?
0/1000