zoukankan      html  css  js  c++  java
  • hive行转多列LATERAL VIEW explode

    该文参考了:http://blog.sina.com.cn/s/blog_7e04e0d00101csic.html

    https://cwiki.apache.org/confluence/display/Hive/LanguageManual+LateralView

    lateral view用于和split、explode等UDTF一起使用的,能将一行数据拆分成多行数据,在此基础上可以对拆分的数据进行聚合,lateral view首先为原始表的每行调用UDTF,UDTF会把一行拆分成一行或者多行,lateral view在把结果组合,产生一个支持别名表的虚拟表。

    单个LATERAL VIEW:

    源表(table1)数据{A:string B:array<BIGINT> C:string}

    A                         B                                C

    190     [1030,1031,1032,1033,1190]      select id
    191     [1030,1031,1032,1033,1190]      select id

    希望的结果是:

    190    1030  select id

    190    1031  select id

    190    1032  select id

    190    1033  select id

    190    1190  select id

    191    1030  select id

    191    1031  select id

    191    1032  select id

    191    1033  select id

    191    1190  select id

    故使用select A,B,C from table_1 LATERAL VIEW explode(B) table1 as B得到上述结果

    多个LATERAL VIEW的介绍:

    LATERAL VIEW clauses are applied in the order that they appear. For example with the following base table:

    Array<int> col1

    Array<string> col2

    [1, 2]

    [a", "b", "c"]

    [3, 4]

    [d", "e", "f"]

    SELECT myCol1, myCol2 FROM baseTable
    LATERAL VIEW explode(col1) myTable1 AS myCol1
    LATERAL VIEW explode(col2) myTable2 AS myCol2;
    结果如下:

    int myCol1

    string myCol2

    1

    "a"

    1

    "b"

    1

    "c"

    2

    "a"

    2

    "b"

    2

    "c"

    3

    "d"

    3

    "e"

    3

    "f"

    4

    "d"

    4

    "e"

    4

    "f"

     复杂方式:

    select * from tb_split;

    20141018  aa|bb 7|9|0|3

    20141019  cc|dd  6|1|8|5

    使用方式:select datenu,des,type from tb_split 

    lateral view explode(split(des,"//|")) tb1 as des

    lateral view explode(split(type,"//|")) tb2 as type

    执行过程是先执行from到 as cloumn的列过程,在执行select 和where后边的语句;

  • 相关阅读:
    Delphi制作带图标的弹出式选单 DELPHI
    在DBGrid中实现Copy、Paste功能 DELPHI
    使用stringgrid的例子 DELPHI
    取得某一dll所有输出函数名 DELPHI
    HDOJ 2512 一卡通大冒险
    POJ 2533 Longest Ordered Subsequence
    UVA 10795 A Different Task
    HDOJ 1505 City Game
    HDOJ 1864 最大报销额
    HDOJ 1421 搬寝室
  • 原文地址:https://www.cnblogs.com/judylucky/p/3713774.html
Copyright © 2011-2022 走看看