Od version 0.12 Hive obsługuje typ danych VARCHAR
.Czy varchar działa lepiej niż łańcuch w gałęzi?
Czy VARCHAR
zapewni lepszą wydajność niż STRING
w typowym zapytaniu analitycznym Hive?
Od version 0.12 Hive obsługuje typ danych VARCHAR
.Czy varchar działa lepiej niż łańcuch w gałęzi?
Czy VARCHAR
zapewni lepszą wydajność niż STRING
w typowym zapytaniu analitycznym Hive?
W gałęzi domyślnie ciąg jest VARCHAR (32762), więc oznacza to,
domyślne zachowanie dla typu danych STRING jest mapowanie typu do typu danych SQL VARCHAR (32762) , domyślne zachowanie c prowadzą do wydajności wystawia
To wyjaśnienie jest w oparciu o IBM BIG SQL, który używa gałąź implictly
varchar typ danych jest również zapisane wewnętrznie jako ciąg znaków. Jedyną różnicą, jaką widzę jest String jest nieograniczony z maksymalną wartością 32 767 bajtów, a Varchar jest ograniczony maksymalną wartością 65 535 bajtów. Nie sądzę, że będziemy mieli jakiekolwiek zwiększenie wydajności, ponieważ wewnętrzna implementacja obu przypadków to String. Nie wiem zbyt wiele o wewnętrznych układach ula, ale widziałem dodatkowe przetwarzanie wykonywane przez gałąź dla obcinania wartości varchar. Poniżej znajduje się kod (org.apache.hadoop.hive.common.type.HiveVarchar): -
public static String enforceMaxLength(String val, int maxLength) {
String value = val;
if (maxLength > 0) {
int valLength = val.codePointCount(0, val.length());
if (valLength > maxLength) {
// Truncate the excess chars to fit the character length.
// Also make sure we take supplementary chars into account.
value = val.substring(0, val.offsetByCodePoints(0, maxLength));
}
}
return value;
}
Jeśli ktoś dokonał analizy wydajności/benchmarking proszę podzielić.
Dlaczego to jest 32762, a nie 2^15-1? – maxx777
@ maxx777as mapuje typ danych SQL, dlatego raczej niż normalny ciąg języka programowania. –