intellij idea安装 Zookeeper 希腊字母 azure swing redis常用语句 mockito jtable 建筑资质 vue组件注册 传智播客python jquery去空格 jquery移除子元素 mysql修改字段值 excel加减混合求和 docker导入镜像 java 注解 python下载安装教程 python编程题 配置python环境 python查找指定字符 java中继承 java重载和重写 java表达式 java方法重载 java的方法 java当前时间 java运行 java异常 php语言入门 python教程下载 flash实例 flash相册制作 路由器有辐射吗 jb51 php购物车 js刷新页面 刷新页面 保留小数点后两位 pr怎么放大视频画面
当前位置: 首页 > 学习教程  > 编程语言

hive中的explode和lateral view的使用

2020/10/8 18:17:16 文章标签:

expolde的使用 expolde是一个典型的UDTF函数&#xff08;一进多出&#xff09;&#xff0c;通过以下例子来快速了解expolde函数的使用&#xff1a; create table test_message(id int,name string,location array<string>,city array<int>) row format delimited f…

  • expolde的使用
    expolde是一个典型的UDTF函数(一进多出),通过以下例子来快速了解expolde函数的使用:

    create table test_message(id int,name string,location array<string>,city array<int>) row format delimited fields terminated by ","
    collection items terminated by '|';
    
    --准备如下数据
    001,allen,usa|china|japan,1|3|7
    002,kobe,usa|england|japan,2|3|5
    
    --导入数据
    load data local inpath "/root/hivedata/test_message.txt" into table test_message;
    

    第二个字段是一个数组类型,如果我们要获取这个字段的数组的每一个值,就可以用expolde函数了,它会返回数组中所有元素并按行输出,每个元素一行,其用法如下:

    select explode(location) from test_message;
    

    但是当我们像下面那样关联原来表中的字段,就会发现sql语句报错:

    select name,explode(location) from test_message;
    

    为什么会报错呢?其实用explode函数查询出来的结果,其实可以看成是一张新的表,上面得分sql语句只写了from test_message,而select了两个表的字段,这样肯定会报错,所以这就是报错的原因。

  • lateral view(侧视图)的使用

    那怎么样才能关联到第一个表的字段呢?这个时候lateral view就可以派上用场了。lateral view为侧视图,意义是为了配合UDTF来使用,把某一行数据拆分成多行数据.不加lateral view的UDTF只能提取单个字段拆分,并不能塞会原来数据表中,加上lateral view就可以将拆分的单个字段数据与原始表数据关联上。
    其用法如下:

    select name,subview.* from test_message lateral view explode(location) subview as lc;
    

    这样就可以关联到第一张表的字段了。


本文链接: http://www.dtmao.cc/news_show_250039.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?