访问次数
我的另一个总结性博客: todototry 大米粒

hive中同列多行数据组合的方法以及array to string要点(行转列)

1. 同列多行数据组合成一个字段cell的方法, top N 问题的hive方案 如下:

复制代码
hive 列转行 to json与to array  list set等复杂结构,hive topN的提取的窗口统计方法


   
    select
                ll,
            collect_list(n) ,  -- 将topN 转换成 List or Json with the help of collect_set(xx) collect_list(xx)
            collect_list(nn),
            collect_list(ll),
            collect_list(dd)
    from
            (
                    select
                            concat('\'', n, '\'') as nn,
                            n                          ,
                            ll                         ,
                            concat_ws(":", concat('\\\'', n, '\\\''), ll) as dd ,

                                  row_number() over (partition by ll order by n desc ) as num1     -- 某用户的所有文章点击率排序
                    from
                            (
                                   select 1 as n, '4' as ll

                                    UNION all

                                    SELECT 2 as n, '4' as ll

                                    UNION all

                                    select 3 as n, '5' as ll

                                    UNION all

                                    SELECT 4 as n, '5' as ll
                                UNION all

                                    SELECT 5 as n, '4' as ll

                                    UNION all

                                    select 6 as n, '5' as ll

                                    UNION all

                                    SELECT 7 as n, '5' as ll

                                UNION all

                                    SELECT 8 as n, '4' as ll

                                    UNION all

                                    select 9 as n, '5' as ll

                                    UNION all

                                    SELECT 10 as n, '5' as ll
                            )
                            a

            )
            c
            where num1 <= 3      -- 筛选top 3
    group by
            ll
复制代码

 

 

2. 建表存储list类型数据的方法以及注意点

复制代码
CREATE TABLE if not exists celebrity_basic_info 
(
    author_id bigint COMMENT 'id',

    area array<string> COMMENT '复杂类型的数据'
   

) COMMENT '-----'
PARTITIONED BY
(
        dt string
)

ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' COLLECTION ITEMS TERMINATED BY ',' STORED AS textfile ;  --这里要注意存储时的序列化转换 collection item 的分隔符。
复制代码

 

3. 将array<string>类型数据转成string显示的方法

select  
author_id       ,
concat( case when size(area)=-1 then '[' else '["' end,concat_ws('","'  , area )            , case when size(area)=-1 then ']' else '"]' end)  --组装拼接成json list
 from  celebrity_basic_info

 

posted @   fandyst  阅读(15735)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示