2013-08-25 19 views
8

Próbuję utworzyć tabelę (tabela 2) w ulu z innej tabeli (tabela 1). Próbuję wykluczyć niektóre wiersze z wartości NULL i próbowałem następujących warunków.Obsługa wartości NULL w ulu

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

Jednak gdy próbuję to następujące zapytanie z nowej tabeli otrzymuję ponad 300 wierszy z vaues NULL:

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

Czyżby ktoś wskaż co jest przyczyną tych wartości NULL?

Dziękuję.

Ravi

Odpowiedz

18

pierwsze — Nie sądzę column1 is not NULL or column1 <> '' sprawia bardzo dużo sensu. Może miałeś zamiar napisać column1 is not NULL and column1 <> '' (AND zamiast OR)?

Po drugie, ze względu na podejście schematu "Hive" do definicji tabel, niepoprawne wartości zostaną przekonwertowane na NULL, kiedy je odczytasz. Na przykład, jeśli table1.column1 jest typu STRING i table2.column1 jest typu INT, to nie sądzę, że table1.column1 IS NOT NULL wystarczy, aby zagwarantować, że table2.column1 IS NOT NULL. (Tego jednak nie jestem pewien.)

+1

Zdecydowanie, to ** ORAZ **. Kolumna nie może mieć wartości NULL i nie może być pusta (""). Ruakh dał dobrą odpowiedź. – jbaptiste

2

Jaki jest typ danych dla kolumny 1 w twojej tabeli Hive? Pamiętaj, że jeśli Twoja kolumna ma wartość STRING, nie będzie mieć wartości NULL, mimo że Twój zewnętrzny plik nie zawiera żadnych danych dla tej kolumny.

+0

Dzięki! to działa dla mnie. – Ghrua

4

Spróbuj również uwzględnić długość> 0.

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

Aby sprawdzić NULL dane dla Kolumnie1 i rozważyć swój typ danych jest String, można skorzystać z poniższego polecenia:

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

spróbuj IsNull (A) isnotnull (a) , nvl(), itp. W niektórych wersjach (potencjalnie w połączeniu z ustawieniami serwera - przynajmniej z tym, nad którym pracuję) składnia "IS NULL" i "IS NOT NULL" nie wykonuje logiki, gdy jest skompilowany. Sprawdź numer here, aby uzyskać więcej informacji.