我正在執行的計算可能包含除以0,在這種情況下,我想結果是一個任意值(55)。令我驚訝的是,用計算語句包裝計算並沒有完成這項工作!Netezza不會對案例陳述進行懶惰評估?
select case when 1=0 then 3/0 else 55 end
ERROR HY000:0
這是爲什麼鴻溝?是否有另一種解決方法?
我正在執行的計算可能包含除以0,在這種情況下,我想結果是一個任意值(55)。令我驚訝的是,用計算語句包裝計算並沒有完成這項工作!Netezza不會對案例陳述進行懶惰評估?
select case when 1=0 then 3/0 else 55 end
ERROR HY000:0
這是爲什麼鴻溝?是否有另一種解決方法?
好的,我是不準確的。這是「0分」與失敗的確切查詢:
select case when min(baba) = 0 then 55 else sum(1/baba) end from t group by baba
這看起來像一個懶惰的評價失敗了Netezza公司,如通知,我組由baba
,所以每當巴巴是0,這也意味着min(baba)
爲0,並且評估應該已經優雅地停止,而沒有達到1/baba
的期限並且不能以0分割。對嗎?好吧,不。
我猜是這裏的疑難雜症和失敗原因是Netezza公司評估行條件,纔可以評估的總條款。因此,它必須在每一行評估1/baba
和baba
,只有這樣纔可以評估總條款min(baba)
和sum(1/baba)
所以,解決方法(對我來說)是:select case when min(baba) = 0 then 55 else 1/min(baba) end from t group by baba
,它具有相同的含義。
從我對Netezza查詢處理的理解來看,聚合是在主機上「在」FPGA上的可見性/限制引擎之後完成的。這可以解釋你的查詢失敗的原因,以及爲什麼你會看到它在rbr基礎上評估和處理行。從您在解決方法中編寫查詢的方式看來,您似乎將處理移至Netezza的「主機」部分,在聚合後應用。 – cairnz 2012-03-03 23:49:19
也許它不斷摺疊。如果您嘗試使用真實數據呢? (類似的事情發生在SQL Server中,當select = 1,然後LOG(0)else 55 end') – 2011-03-30 10:25:04
可能是這樣 - 這個失敗是由於常量。我會發布真正的查詢。 – ihadanny 2011-03-30 12:40:02