Lateral View(阿里大数据用法)

Lateral View和表生成函数(例如Split、Explode等函数)结合使用,它能够将一行数据拆成多行数据,并对拆分后的数据进行聚合。

单个Lateral View语句

语法定义如下。

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

Lateral view outer:当您定义的表生成函数不输出任何一行时,对应的输入行在Lateral View结果中依然保留,且所有表生成函数输出列为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”
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值