減法查詢似乎不適用於HIVE。在HIVE中減法查詢
嘗試前:
select x from abc
minus
select x from bcd ;
我這樣做不對或減去查詢沒有爲HIVE定義?如果是這樣,是否有任何其他方式來得到這個結果?
減法查詢似乎不適用於HIVE。在HIVE中減法查詢
嘗試前:
select x from abc
minus
select x from bcd ;
我這樣做不對或減去查詢沒有爲HIVE定義?如果是這樣,是否有任何其他方式來得到這個結果?
HQL不支持MINUS
運營商。看到這個相關的,雖然有點老,資源:
http://www.quora.com/Apache-Hive/What-are-the-biggest-feature-gaps-between-HiveQL-and-SQL
你想做的事可以用LEFT JOIN
或NOT EXISTS
做什麼:
SELECT x
FROM abc
LEFT JOIN bcd
ON abc.x = bcd.x
WHERE bcd.x IS NULL
編輯:每下面的評論,NOT EXISTS
不支持的。
SELECT x
FROM abc
WHERE NOT EXISTS (SELECT x FROM bcd)
HQL不支持減號,但您始終可以使用Patrick Tucci解決方案,當您的選擇列表只包含幾個字段時,它可以正常工作。在我的情況下,我想找到整個表(30+個字段)和備份副本之間的差異,以查找不同的記錄。這裏是我的解決方案:
select <all-my-fields>, count(*)
from (
select <all-my-fields> from mytable
union all
select <all-the-fields> from mybackuptable
) merged_data
group by <all-my-fields>
having count(*) = 1
現在這不是一個完全地「減」,因爲單從記錄將mybackuptable的結果是我想要的東西出現。爲了讓一個完整的「減」相當於我已經添加了這一點:
select <all-my-fields>
from (
select max(source) source, <all-my-fields>, count(*)
from (
select 1 source, <all-my-fields> from mytable
union all
select 2, source, <all-the-fields> from mybackuptable
) merged_data
group by <all-my-fields>
having count(*) = 1
) minus_data
where source = 1
的LEFT JOIN一件作品,但不會再EXISTS一個由HIVE似乎 – Macopare
@Macopare感謝您的反饋意見是不支持。我不太常用'NOT EXISTS',所以我不知道。 –