0 / 0
Go back to the English version of the documentation
Typy danych STRING, TEXT i VARCHAR w tabelach Snowflake mają przypisany typ danych CLOB w programie Watson Query .
Last updated: 31 mar 2023
Typy danych STRING, TEXT i VARCHAR w tabelach Snowflake mają przypisany typ danych CLOB w programie Watson Query .

Podczas wirtualizowania tabel w źródle danych Snowflake program Watson Query przekształca dane typu STRING, TEXT i VARCHAR na typ CLOB zamiast typu VARCHAR, gdy przekraczają maksymalną długość łańcucha.

Objawy

W przypadku wirtualizowania tabeli Snowflake , która zawiera typy danych STRING, TEXT i VARCHAR, które przekraczają domyślną maksymalną długość łańcucha 32 K dla parametru MaxStringSize , typ danych kolumny jest przekształcany w CLOB.

Snowflake określa maksymalną długość (16,777,216) dla typów STRING, TEXT i VARCHAR, jeśli maksymalna długość nie jest zdefiniowana przez użytkownika. Dlatego program Watson Query wirtualizuje typ danych na określoną długość, aby uniknąć obcięcia. Można jednak dostosować maksymalną długość łańcucha tych typów danych, aby uniknąć konwersji na CLOB, ustawiając wielkość łańcucha na wartość mniejszą niż 32 kB.

Poniższy przykład pochodzi z tabeli Snowflake z łańcuchami, w których można dostosować typ kolumny do długości odpowiedniej dla agregacji.

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.
Następujące zapytanie nie powiodło się z powodu typu danych 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

Rozwiązywanie problemu

Istnieje możliwość zmiany kolumny, która powoduje zmniejszenie jej wielkości do wartości, która może być używana w agregacji. W poniższym przykładzie używany jest produkt VARCHAR(200) , ale można wybrać, co jest odpowiednie dla maksymalnej długości danych.
alter nickname TESTDATA.BASIC_STRING alter column "c_str" local type VARCHAR(200);
To samo zapytanie jest teraz pomyślne.
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.
Generative AI search and answer
These answers are generated by a large language model in watsonx.ai based on content from the product documentation. Learn more