2012-07-21 68 views
1

下面是TestingTable1算錯配和失蹤

BUYER_ID | ITEM_ID   | CREATED_TIME 
-----------+-------------------+------------------------ 
1345653  110909316904   2012-07-09 21:29:06 
1345653  151851771618   2012-07-09 19:57:33 
1345653  221065796761   2012-07-09 19:31:48 
1345653  400307563710   2012-07-09 18:57:33 
1345653  310411560125   2012-07-09 16:09:49 
1345653  120945302103   2012-07-09 13:40:23 
1345653  261060982989   2012-07-09 09:02:21 

數據下面是TestingTable2

USER_ID | PRODUCT_ID   | LAST_TIME 
-----------+-------------------+------------------- 
1345653  110909316904   2012-07-09 21:30:06 
1345653  152851771618   2012-07-09 19:57:33 
1345653  221065796761   2012-07-09 19:31:48 
1345653  400307563710   2012-07-09 18:57:33 

我需要BUYER_IDUSER_IDTestingTable1比較TestingTable2數據。我需要從TestingTable1比較TestingTable2後找到所有(基本上是計數)丟失和不匹配的條目。我創建SQL搗鼓這個 -

http://sqlfiddle.com/#!3/d87b2/1

如果你運行我在SQL查詢撥弄,你會得到輸出原樣

BUYER_ID ERROR 
1345653  5 

這是對從TestingTable1最後three行丟失在TestingTable2和其餘twoBUYER_IDUSER_IDTestingTable1比較後不匹配。

現在複雜的事情開始了。

問題聲明 -

在我的電流輸出,我得到錯誤計數爲5。所以如果你看到ITEM_IDPRODUCT_ID這兩個表中的第一行是相同的,但是CREATED_TIMELAST_TIME不相同,那兩次之間的差別僅僅是1 minute。所以目前我報告說這是不匹配,但我需要的是,如果它們之間的差異在15 minutes range之內,那麼我不想將其報告爲錯誤。因此,在我當前的查詢中實現此功能後,我將獲得錯誤計數爲4,因爲差異在第一行的15分鐘範圍內。

那麼如何在我當前的查詢中實現此功能?這是我的問題。

P.S-我正與Hive和Hive一起支持sql語法。所以我認爲任何修改都會在我當前的查詢中起作用。

回答

1

您的SQL Server SQL小提琴查詢可以修改如下,並使其工作。但是,我不確定是否Hive支持datediff

SELECT TT.BUYER_ID , COUNT(*) FROM 
(SELECT testingtable1.buyer_id, testingtable1.item_id, testingtable1.created_time FROM 
testingtable2 RIGHT JOIN testingtable1 
ON (testingtable1.item_id = testingtable2.product_id 
AND testingtable1.BUYER_ID = testingtable2.USER_ID 
AND abs(datediff(mi, testingtable1.created_time,testingtable2.last_time)) <= 15) 
where testingtable2.product_id IS NULL) TT GROUP BY TT.BUYER_ID; 
+0

感謝cravoori,是的它在SQL中工作。但是當我在HiveQL中嘗試同樣的事情時,它會在'mi'處拋出錯誤。我發現這個鏈接[http://www.folkstalk.com/2011/11/date-functions-in-hive.html](http://www.folkstalk.com/2011/11/date-functions-in -hive.html),其中我可以看到Hive中還有datediff函數。但是,我如何通過使用相同的函數修改相同的查詢以在Hive中工作。目前它報告的錯誤是'FAILED:語義分析錯誤:第10行:157無效表別名mi'。任何幫助將不勝感激。 – ferhan 2012-07-21 01:01:19

+0

你能幫我一下嗎?我正在尋找替代方法來做與上面發佈的解決方案相同的事情,因爲它在SQL Server中工作正常,所以我需要其他方式來做同樣的事情,基本上是一種替代方法,我試着把where條款中的日期差異條件,但它沒有奏效。任何幫助將不勝感激。 – ferhan 2012-07-23 20:57:03