資料の 英語版 に戻る
Snowflake テーブルの STRING、TEXT、VARCHAR データ型は、Data Virtualizationでは CLOB データ型に割り当てられます
SnowflakeテーブルのSTRING、TEXT、VARCHARデータ型が、Data VirtualizationでCLOBデータ型に割り当てられた
最終更新: 2024年11月26日
Snowflakeデータ・ソースのテーブルを仮想化する場合Data Virtualization文字列の最大長を超えると、STRING、TEXT、およびVARCHAR型のデータがVARCHAR型ではなくCLOB型に変換されます。
症状
MaxStringSizeパラメーターのデフォルトの最大ストリング長である 32 K を超えるデータ・タイプ STRING、TEXT、および VARCHAR を含むSnowflake表を仮想化すると、列のデータ・タイプは CLOB に変換されます。
Snowflakeは、最大長がユーザー定義でない場合に、STRING、TEXT、および VARCHAR タイプの最大長 16,777,216 を指定します。 そのため、Data Virtualizationはデータ型を特定の長さに仮想化し、切り捨てを回避する。 ただし、これらのデータ・タイプの最大ストリング長を調整して、ストリング・サイズを 32 K 未満の値に設定することにより、CLOB に変換されないようにすることができます。
以下に、列タイプを集計に適した長さに調整できるストリングを含む Snowflake 表の例を示します。
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