array_contains 分析函數使用演示

Hive中的array_contains函數與SQL中的 in關鍵字 操做相似,用於斷定 包含(array_contains)或不包含(!array_contains)關係。與 in不一樣的是array_contains能夠用於判斷一張表中同一個id的多條記錄中的同一字段是否包含指定的一個或多個值。須要注意字段類型保持一致,若不一致則須要進行強制類型轉換。好比下面這個案例,這段腳本用於統計每一個會員名下有多少張VIP卡及當前是不是VIP有效會員,一個會員可能同時持有多張VIP卡。sql

-- ========================================================================================
-- Purpose : array_contains 分析函數使用演示
------------------------------------ Change Log -------------------------------------------
-- Date Generated   Updated By     Description
-------------------------------------------------------------------------------------------    
-- 2018-12-26       shujuxiong     Initial Version
-- ========================================================================================

-- status_code枚舉:1生效中 2凍結中 3失效中    
select
         user_id
        ,count(*) as card_number    -- 使用過的卡數
        -- 只要任意一張卡有效即斷定爲VIP有效
        ,case when array_contains(collect_set(status_code),cast(1 as smallint)) then 1 else 0 end effective_flag   -- 卡有效標識
from edw_users.dwd_edw_user_vipcard_df  -- 用戶VIP卡購買使用全量表
where dt = '${dt}'
and user_id > 0
and deleted_flag = 'N'
group by user_id
;
相關文章
相關標籤/搜索