2013-08-25 14 views
8

Ich versuche, eine Tabelle (Tabelle 2) in Hive aus einer anderen Tabelle (Tabelle 1) zu erstellen. Ich versuche, bestimmte Zeilen mit NULL-Werten auszuschließen, und habe die folgende Bedingung versucht.Umgang mit NULL-Werten in Hive

insert overwrite table table2 partition (date = '2013-06-01') 
    select column1, column 2.... 
    from table1 
    where column1 is not NULL or column1 <> ''; 

Allerdings, wenn ich diese folgende Abfrage mit der neuen Tabelle versuchen, bekomme ich mehr als 300 Zeilen mit NULL vaues:

select count(*) from table2 where column1 is NULL; 

Könnte jemand Punkt zu dem, was diesen NULL-Wert verursacht?

Vielen Dank.

Ravi

Antwort

18

Erstens — Ich glaube nicht, column1 is not NULL or column1 <> '' sehr viel Sinn macht. Vielleicht wollten Sie schreiben column1 is not NULL and column1 <> '' (AND statt OR)?

Zweitens — wegen Hive des „Schema auf Lese“ Konzept für die Tabellendefinitionen, werden ungültige Werte zu NULL umgewandelt werden, wenn Sie von ihnen lesen. Also zum Beispiel, wenn table1.column1 vom Typ STRING ist und table2.column1 vom Typ INT ist, dann glaube ich nicht, dass table1.column1 IS NOT NULL genug ist, um das zu garantieren table2.column1 IS NOT NULL. (Ich bin mir jedoch nicht sicher.)

+1

Definitiv ist es ** UND **. Die Spalte darf nicht NULL sein UND darf nicht leer sein (''). Ruakh gab die gute Antwort. – jbaptiste

2

Was ist der Datentyp für Spalte1 in Ihrer Hive-Tabelle? Bitte beachten Sie, dass wenn Ihre Spalte STRING ist, sie keinen NULL-Wert haben wird, obwohl Ihre externe Datei keine Daten für diese Spalte enthält.

+0

Danke! Das funktioniert für mich. – Ghrua

4

Versuchen Sie auch die Länge> 0 einzuschließen.

column1 is not NULL AND column1 <> '' AND length(column1) > 0 
0

Um zu überprüfen, für die NULL Daten für column1 und betrachten Sie Ihre Datentyp ist String, können Sie unter Befehl:

select * from tbl_name where column1 is null or column1 <> ''; 
0

Versuchen isnull (a) verwendet wird, isnotnull (a) , nvl() usw. Bei einigen Versionen (möglicherweise in Verbindung mit den Servereinstellungen - zumindest mit der, an der ich arbeite) der Struktur führt die Syntax 'IS NULL' und 'IS NOT NULL' die Logik nicht aus, wenn dies der Fall ist kompiliert. Überprüfen Sie here für weitere Informationen.

Verwandte Themen