2013-08-13 9 views
8

Stworzyłem dwie tabele z kodu Java tableHiveCell i tableHiveWiFi."Błąd niedopasowania danych wejściowych" jako "oczekiwano od bliskiej") "z klauzuli" podczas uruchamiania zapytania sql Hadoop Java

Kiedy próbuję uruchomić sql następnie polecenie:

select count(UEs.cnc) as 'Active UEs' 
        ^
from 
(select distinct cnc from tableHiveCell wifi 
    union 
select distinct cnc from tableHiveCell cell) 
as UEs; 

pojawia się błąd:

java.sql.SQLException: 
Query returned non-zero code: 11, 
cause: FAILED: Parse Error: line 1:22 mismatched input 'as' expecting FROM near ')' in from clause 
at org.apache.hadoop.hive.jdbc.HiveStatement.executeQuery(HiveStatement.java:189). 

Coś mnie ominęło?

[EDIT 1]

Próbowałem:

select count(UEs.cnc) as 'Active UEs' 
        ^
from 
(select distinct cnc from tableHiveCell wifi) 
    union 
(select distinct cnc from tableHiveCell cell) 
as UEs; 

sam błąd

[EDIT 2]

Próbowałem:

select count(UEs.cnc) as Active_UEs 
from (select distinct cnc from tableHiveCell wifi 
    union ALL 
select distinct cnc from tableHiveCell cell) as UEs; 
              ^

uzyskać ten sam błąd, ale ostatni as:

line 1:142 mismatched input 'as' expecting Identifier near ')' in subquery source 
+0

można spróbować usuwając „jako” słowa kluczowego i po prostu stwierdzając, alias jako " Aktywne Ues "i" UEs "bez słowa kluczowego AS? niektóre implementacje sql po prostu nie mają tego jako rzeczy (MS?) – Najzero

+0

Kiedy uruchomię 'select count (cnc) jako boo z tableHiveCell', to działa, nie myśl, że jego problem jako. Dzięki –

+0

cóż, wtedy pojedynczy ciąg '' 'może być twoim problemem spróbuj podwójnie cytować :-) – Najzero

Odpowiedz

6

Zgodnie z wnioskiem w formie odpowiedzi: wydaje Hadoop mieć problemy z aliasów poprzez AS hasła na podzapytania i można łatwo przypisać alias bez AS Keyword.

Przykład można znaleźć tutaj: https://www.inkling.com/read/hadoop-definitive-guide-tom-white-3rd/chapter-12/querying-data

A cytowany przez przyszłych użytkowników (patrz mt alias podzapytania):

SELECT station, year, AVG(max_temperature) 
FROM (
    SELECT station, year, MAX(temperature) AS max_temperature 
    FROM records2 
    WHERE temperature != 9999 
    AND (quality = 0 OR quality = 1 OR quality = 4 OR quality = 5 OR quality = 9) 
    GROUP BY station, year 
) mt 
GROUP BY station, year; 
Powiązane problemy