我在配置單元中有一個表,其中包含'null'作爲數據。 我想用「N/A」 使用COALESCE(COL_NAME,「N/A」)試圖取代「空」,但它不工作 如果我使用,它的工作替換配置單元中的NULL
if(col_name='null','N/A',col_name)
我有百萬值在專欄中,這個'如果'會影響表現嗎?如果是的話,什麼可能是最好的辦法來處理這種情況?
請建議
我在配置單元中有一個表,其中包含'null'作爲數據。 我想用「N/A」 使用COALESCE(COL_NAME,「N/A」)試圖取代「空」,但它不工作 如果我使用,它的工作替換配置單元中的NULL
if(col_name='null','N/A',col_name)
我有百萬值在專欄中,這個'如果'會影響表現嗎?如果是的話,什麼可能是最好的辦法來處理這種情況?
請建議
使用IF條件不會影響您的性能。無論您選擇哪種條件函數(CASE,NVL,IF等),都需要遍歷所有記錄來檢查該條件。繼續使用IF條件
我懷疑你的列不是真正的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語句必須在每個分區定義中使用 - 在分區不會使用表級設置。