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 pageidArray<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 pageidint 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 adidcount(1)
    11
    21
    32
    41
    51

多个Lateral View语句

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

以下面的表为例:

 
Array<int> col1Array<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 mycol1Array<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 myCol1string 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值