ODPS之合并与拆分-Lateral View

Lateral View

更新时间:2019-02-13 11:56:02

编辑 ·  · 我的收藏

本页目录

Lateral View和split,explode等UDTF一起使用,它能够将一行数据拆成多行数据,并在此基础上对拆分后的数据进行聚合。

单个Lateral View语句

语法定义如下:

lateralView: LATERAL VIEW [OUTER] udtf(expression) tableAlias AS columnAlias (',' columnAlias) * fromClause: FROM baseTable (lateralView)*

说明如下:

  • Lateral view outer:当table function不输出任何一行时,对应的输入行在Lateral view结果中依然保留,且所有table function输出列为null。

示例如下:

假设我们有一张表pageAds,它有两列数据,第一列是pageid string,第二列是adid_list,即用逗号分隔的广告ID集合。

 
string pageid Array<int> adid_list
“front_page” [1, 2, 3]
“contact_page” [3, 4, 5]

需求是要统计所有广告ID在所有页面中出现的次数,实现过程如下所示。

  1. 拆分广告ID,如下所示:
    SELECT pageid, adid 
     FROM pageAds LATERAL VIEW explode(adid_list) adTable AS adid;

    执行结果如下:

     
    string pageid int adid
    “front_page” 1
    “front_page” 2
    “front_page” 3
    “contact_page” 3
    “contact_page” 4
    “contact_page” 5
  2. 进行聚合的统计,语句如下:
    SELECT adid, count(1) 
        FROM pageAds LATERAL VIEW explode(adid_list) adTable AS adid
    GROUP BY adid;

    执行结果如下:

     
    int adid count(1)
    1 1
    2 1
    3 2
    4 1
    5 1

多个Lateral View语句

一个from语句后可以跟多个Lateral View语句,后面的Lateral View语句能够引用它前面的所有表和列名。

以下面的表为例:

 
Array<int> col1 Array<string> col2
[1, 2] [“a”, “b”, “c”]
[3, 4] [“d”, “e”, “f”]
  • 执行单个语句:
    SELECT myCol1, col2 FROM baseTable
        LATERAL VIEW explode(col1) myTable1 AS myCol1;

    执行结果如下所示:

     
    int mycol1 Array<string> col2
    1 [“a”, “b”, “c”]
    2 [“a”, “b”, “c”]
    3 [“d”, “e”, “f”]
    4 [d”, “e”, “f”]
  • 加上一个Lateral View语句,如下所示:
    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”
     

    来源: https://help.aliyun.com/document_detail/87722.html?spm=a2c4g.11186623.2.9.41a11230wnHcpj

发布了35 篇原创文章 · 获赞 6 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/colby_chenlun/article/details/100578585