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
;
相关文章
相关标签/搜索