2012-04-11 9 views
5

Ho un file di testo separato da tabulazioni in HDFS e voglio esportarlo in una tabella MySQL.Come utilizzare gli ID autoincrement nell'esportazione Sqoop

Poiché le righe nel file di testo non hanno ID numerici, come posso esportare in una tabella con un ID impostato automaticamente durante SQL INSERT (autoincrement)?

Se si tenta di esportare (id essendo l'ultimo attributo definito nella tabella), ottengo

java.util.NoSuchElementException 
    at java.util.AbstractList$Itr.next(AbstractList.java:350) 
    at entity.__loadFromFields(entity.java:996) 

Se prendo la classe generata automaticamente e modificarlo per escludere l'id-attributi, ottengo

java.io.IOException: java.sql.SQLException: No value specified for parameter 27 

dove il parametro 27 è 'id'.

versione è 1.3.0 Sqoop-cdh3u3

risposta

3

I n Sqoop 1.4.1, scrivendo un "nullo" nella posizione del campo del file di testo corrispondente al campo di autoincremento funzionante per me. Dopo l'esportazione su mySQL vedrai un ID incrementato e automaticamente assegnato.

+0

Non posso testarlo, ma assumendo che Funziona, questa è la soluzione più elegante – thomers

+0

FYI: letteralmente, virgolette intorno a null nella query. Stavo cercando di esportare da Hadoop a una tabella MySQL di Rails. Poiché la tabella Rails aveva un campo ID autoincrementante, ho provato ad aggiungere : ... "null" come id, ... come il primo campo nella query Hive. Ha funzionato benissimo !! TY Jorge! –

0

Come qualcuno sulla mailinglist Sqoop suggerito:

  • creare una tabella temporanea senza l'ID
  • Sqoop-export in questa tabella
  • Copy le righe di questa tabella nel tavolo finale (che ha l'ID autoincrement)
0

La mia tabella di origine è in HIVE. Ciò che funziona per me è che aggiungo una colonna chiamata id int e compili la colonna come NULL. Dopo sqoop, mysql riceverà valori di insert (id, X, Y) (null, "x_value," y_value "). Quindi mysql sa popolare l'id come incremento automatico

Problemi correlati