2016-05-06 9 views
1

Ich habe dies in dem Sqoop Handbuch bemerkt:Belastungstabelle von Oracle nach Hive, Datum und Zeitstempel umwandeln String

24,5. Schemadefinition im Hive

Hive-Benutzer werden feststellen, dass zwischen SQL-Typen und Hive-Typen keine Eins-zu-Eins-Zuordnung besteht. Im Allgemeinen werden SQL-Typen, die keine direkte Zuordnung haben (z. B. DATE, TIME und TIMESTAMP), in Hive zu STRING gezwungen. Die SQL-Typen NUMERIC und DECIMAL werden zu DOUBLE gezwungen. In diesen Fällen wird Sqoop in seinen Protokollmeldungen eine Warnung ausgeben, die Sie über den Genauigkeitsverlust informiert.

Und ich weiß Sqoop die Spalte angeben können - Typzuordnung mit

  • --map-column-java
  • --map-column-hive

Aber mein Fall ist ich eine allgemeine Art benötigen Zuordnung zu geben, von RDBMS Geben Sie in das HIVE-Typ-Mapping ein, das eine Datums- oder Datumszeit-Konvertierung in ein Datum oder einen Zeitstempel erfordert.

Gibt es eine Lösung?

+0

Das Format von Datum und Zeitstempel umwandeln ** ist nicht dasselbe ** in Bienenstock und in RDBMS-Datenbanken. Sie können also keine generische Lösung dafür finden. Sie müssen es manuell konvertieren, indem Sie '--map-column-hive' für jedes RDBMS verwenden. –

+0

Können Sie den Unterschied zwischen Datum und Zeitstempel in Hive und in RDBMS und den Grund, warum es keine generische Lösung gibt, genauer beschreiben. – cdhit

Antwort

0

Sqoop + ORC + hcatalog hilft Ihnen bei der korrekten Zuordnung. Sqoop + Parkett es Datum in String

mysqlHostname=ip-172-31-2-124.us-west-2.compute.internal       
mysqlDBName=employees                
mysqlUsername=hive                 


sqoop import \ 
     --connect jdbc:mysql://$mysqlHostname/$mysqlDBName \ 
     --table salaries \ 
     --username $mysqlUsername \ 
     -P \ 
     --hcatalog-table orc_salaries \ 
     --create-hcatalog-table \ 
     --map-column-hive from_date=date,to_date=date\ 
     --hcatalog-storage-stanza 'stored as orcfile tblproperties ("orc.compress"="ZLIB")'