0 / 0
Go back to the English version of the documentation
Typ danych STRING w tabelach Hive jest przypisany do typu danych CLOB w programie Watson Query
Last updated: 31 mar 2023
Typ danych STRING w tabelach Hive ma przypisany typ danych CLOB w programie Watson Query .

Podczas zwirtualizowania tabel w źródle danych Hive Watson Query przekształca dane typu STRING w typ CLOB , a nie Varchar , jeśli przekracza maksymalną długość łańcucha.

Objawy

W przypadku wirtualizowania tabeli Hive , która zawiera typ danych STRING , który przekracza domyślną maksymalną długość łańcucha (MaxStringSize), typ danych kolumny jest przekształcany w CLOB.

Opcja Hive nie daje maksymalnej długości dla typów STRING , dlatego Watson Query jest wirtualizowane na określonej długości, aby uniknąć obcięcia. Można jednak dostosować maksymalną długość.

Poniższy przykład pochodzi z tabeli Hive 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ązanie 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