0 / 0
資料の 英語版 に戻る

SnowflakeテーブルのSTRING、TEXT、VARCHARデータ型が、Data VirtualizationでCLOBデータ型に割り当てられた

最終更新: 2024年11月26日
Snowflake テーブルの STRING、TEXT、VARCHAR データ型は、Data Virtualizationでは CLOB データ型に割り当てられます

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.