2015-03-25 64 views
0

我在配置單元中有一個表,其中包含'null'作爲數據。 我想用「N/A」 使用COALESCE(COL_NAME,「N/A」)試圖取代「空」,但它不工作 如果我使用,它的工作替換配置單元中的NULL

if(col_name='null','N/A',col_name) 

我有百萬值在專欄中,這個'如果'會影響表現嗎?如果是的話,什麼可能是最好的辦法來處理這種情況?

請建議

回答

1

使用IF條件不會影響您的性能。無論您選擇哪種條件函數(CASE,NVL,IF等),都需要遍歷所有記錄來檢查該條件。繼續使用IF條件

1

我懷疑你的列不是真正的NULL值(即沒有值),而是等於「null」的字符串。也許這就是數據從源系統加載的方式?

如果這是真的,那麼COALESCE(col_name,'N/A')函數將始終返回col_name的值,因爲這是該函數中列出的第一個非NULL值。

嘗試像查詢:

SELECT COUNT(*) FROM table_name WHERE col_name IS NULL; 

這會告訴你,如果該列實際上有NULL值,或者不是你已經配置了蜂巢。

請注意,您可以通過覆蓋缺省NULL行爲改變蜂房的行爲:

ALTER table_name SET TBLPROPERTIES('serialization.null.format'='your_value') 

另外請注意,如果你有一個分區表,上面的SET語句必須在每個分區定義中使用 - 在分區不會使用表級設置。