2014-09-11 12 views

risposta

3

In alveare per String predefinita viene mappata VARCHAR (32762) quindi questo significa

  • se il valore supera 32762 allora il valore viene troncato
  • se i dati non richiede la lunghezza massima VARCHAR per la conservazione (per esempio, se la colonna non supera i 100 caratteri), allora alloca le risorse necessarie per la gestione di tale colonna

il comportamento predefinito per il tipo di dati STRING è mappare il tipo di tipo di dati SQL di VARCHAR (32762) , il comportamento predefinito c un cavo di prestazioni emette

Questa spiegazione è sulla base di IBM BIG SQL che utilizza alveare implicitamente pone

IBM BIGINSIGHTS doc reference

+0

Perché è 32762 e non 2^15-1? – maxx777

+0

@ maxx777 come mappa il tipo di dati SQL ecco perché piuttosto che una normale stringa di linguaggio di programmazione. –

0

varchar tipo di dati è inoltre memorizzato internamente come stringa. L'unica differenza che vedo è che String non ha limiti con un valore massimo di 32.767 byte e Varchar è limitato con un valore massimo di 65.535 byte. Non penso che avremo alcun guadagno in termini di prestazioni perché l'implementazione interna per entrambi i casi è String. Non so molto sugli interni di hive, ma potrei vedere l'ulteriore elaborazione eseguita dall'alveare per troncare i valori varchar. Di seguito è riportato il codice (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; 
} 

Se qualcuno ha fatto l'analisi delle prestazioni/analisi comparativa si prega di condividere.

Problemi correlati