Es wird keine Zeilen auf leeren Datensatz zurück, weil Sie group by
und having
Filter verwenden. Gruppieren, indem Sie nichts gruppieren, deshalb gibt es keine Zeilen zurück. Ohne Gruppe von und mit Abfrage gibt 0:
select nvl(count(*),0) cnt, 'xyz' AS TABLE_NAME
from xyz
where data_dt='20170423'
Als Lösung können Sie UNION ALL mit null Zeile, wenn sie leer Dataset
select col1, col2, nvl(count(*),0) AS DUPLICATE_ROW_COUNT, 'xyz' AS TABLE_NAME
from xyz
where data_dt='20170423'
group by col1,col2
having count(*) >1
UNION ALL --returns 1 row on empty dataset
select col1, col2, DUPLICATE_ROW_COUNT, TABLE_NAME
from (select null col1, null col2, null AS DUPLICATE_ROW_COUNT, 'xyz' AS TABLE_NAME
)a --inner join will not return rows when non-empty dataset
inner join (
select count(*) cnt from --should will return 0 on empty dataset
(--your original query
select col1, col2, nvl(count(*),0) AS DUPLICATE_ROW_COUNT, 'xyz' AS TABLE_NAME
from xyz
where data_dt='20170423'
group by col1,col2
having count(*) >1
)s --your original query
)s on s.cnt=0
Auch wird es möglich sein CTE zu verwenden (WITH
) und WHERE NOT EXISTS
statt von inner join
für Ihre Unterabfrage, hat es nicht getestet.
Sie können auch Shell verwenden Ergebnis zu erhalten und es auf leeren Wert testen:
dataset=$(hive -e "set hive.cli.print.header=false; [YOUR QUERY HERE]);
# test on empty dataset
if [[ -z "$dataset" ]] ; then
dataset=0
fi
Das macht keinen Sinn. Fügen Sie Ihrem Beitrag ein Datenbeispiel hinzu, einschließlich der erforderlichen Ergebnisse. Ps.s. Auf jeden Fall arbeiten mit Datum oder mindestens mit ISO-Format YYYY-MM-DD –
@Dudu Markovitz Es gibt keine Daten: '... aber für bestimmte Partitionen Daten sind nicht verfügbar' – leftjoin