2016-07-28 11 views
1

Kürzlich habe ich festgestellt, dass, wann immer ich aus einer SQL-Datenbank mit Sqoop aufnehmen, alle Datetime-Felder in eine bigint (Epoche * 1000) anstelle von String konvertiert werden.Stop sqoop von Konvertieren von Datetime nach Bigint

Wichtig zu beachten: Ich lagere als Parkett.

Ich habe eine Reihe von sqoop-Flags wie "--map-column-java" versucht, aber ich möchte nicht manuell für Hunderte von Spalten in Tausenden von Tabellen definieren.

Welche Flagge fehlt mir, um dieses sqoop-Verhalten zu verhindern?

Es scheint, dass sqoop dies bei der Speicherung im Klartext nicht getan hat.

+0

Ja ist Datetime-String konvertiert –

+0

Wie kann ich Sqoop wie dies für Parkett-Dateien als auch dann verhalten bekommen? – Havnar

+0

Hanvar Ich habe sqoop nicht zum Speichern von Daten in Parkettdateien verwendet –

Antwort

2

Statt lassen Sqoop tun, um seine arkane Magie auf meine Tabellen, habe ich beschlossen, die folgendes zu tun:

  1. Ingest in eine temporäre Tabelle, als Text gespeichert.
  2. Erstellen Sie eine Tabelle (falls nicht vorhanden), wie die temporäre Tabelle, wie Parkett gespeichert
  3. Einsatz überschreiben Sie den Text temporäre Tabelle in das Parkett gespeicherten Tabelle
  4. gespeichert

Dies ohne den Aufwand für die richtige Datumsformatierung erlaubt mit (möglicherweise nicht vorhanden) Konfiguration und Einstellungen in Sqoop optimieren.

Der einzige tradoff ist, dass es mit Klartextimport Sqoop etwas langsamer

Verwandte Themen