2016-01-20 40 views
8

Sto cercando di creare una tabella Hive con lo schema stringa, stringa, doppio su una cartella contenente due file Parquet. Il primo schema di file parquet è string, string, double e lo schema del secondo file è string, double, string.Utilizzo di tabella alveare su parquet in Pig

Sto cercando di utilizzare la tabella hive in script di maiale (0.14).

A = LOAD 'dynschema' USING org.apache.hive.hcatalog.pig.HCatLoader(); 

DUMP A; 

Ma ho l'errore

java.lang.UnsupportedOperationException: Non è possibile ispezionare org.apache.hadoop.hive.serde2.io.DoubleWritable

che ho il sospetto è dovuto allo schema del secondo file è diverso dallo schema della tabella poiché la suddivisione del primo file viene letta correttamente ma questa eccezione si verifica durante la lettura della suddivisione del secondo file.

ho anche guardato nel codice HCatRecordReader's e abbiamo trovato questo pezzo di codice

DefaultHCatRecord dr = new DefaultHCatRecord(outputSchema.size()); 
    int i = 0; 
    for (String fieldName : outputSchema.getFieldNames()) { 
    if (dataSchema.getPosition(fieldName) != null) { 
     dr.set(i, r.get(fieldName, dataSchema)); 
    } else { 
     dr.set(i, valuesNotInDataCols.get(fieldName)); 
    } 
    i++; 
    } 

Ecco, vedo che c'è una logica della conversione dallo schema dei dati allo schema di uscita, ma durante il debug, ho trovato lì non c'è differenza in entrambi gli schemi.

Ti prego, aiutami a trovare se,

  1. supporto Pig tali casi di lettura dei dati dalla tabella alveare creati su più file in parquet con diversi schemi.

  2. Se sì, come fare.

+0

Se si conosce lo schema, è possibile utilizzare il caricatore di parchetti di maiale per leggere il file e specificare manualmente lo schema che dovrebbe innescare un'evoluzione dello schema. Non sono sicuro che sarebbe d'aiuto in questo caso specifico, anche se un'evoluzione dello schema sembra difficile da fare. – LiMuBei

+0

Lo stesso vale per Avro? – SaurabhG

+0

Non so come funziona lo storage avro di maiale. Penso che tu possa specificare manualmente anche uno schema. – LiMuBei

risposta

1

Se si dispone di file con 2 schemi differenti, il seguente sembra essere ragionevole:

  1. dividere il file, in base alla quale lo schema hanno
  2. Fai tavoli fuori di essi
  3. Se si desidera, caricare le singole tabelle e memorizzarle in un superabile