- 浏览: 112920 次
- 性别:
- 来自: 深圳
-
文章分类
最新评论
-
土豆蛋儿:
我想读取一个外部文件,以什么方式好了? 文件内容经常编辑
flume 自定义source -
土豆蛋儿:
大神,您好。
flume 自定义source
通过Lateral view可以方便的将UDTF得到的行转列的结果集合在一起提供服务。
因为直接在SELECT使用UDTF会存在限制,即仅仅能包含单个字段,如下:
hive> select my_test(“abcef:aa”) as qq,my_test(“abcef:aa”) as ww from sunwg01;
FAILED: Error in semantic analysis: Only a single expression in the SELECT clause is supported with UDTF’s
hive> select my_test(“abcef:aa”) as qq,’abcd’ from sunwg01;
FAILED: Error in semantic analysis: Only a single expression in the SELECT clause is supported with UDTF’s
不光是多个UDTF,仅仅单个UDTF加上其他字段也是不可以,hive提示在UDTF中仅仅能有单一的表达式。
Sql代码 收藏代码
lateralView: LATERAL VIEW udtf(expression) tableAlias AS columnAlias (',' columnAlias)*
fromClause: FROM baseTable (lateralView)*
描述
lateral view用于和split, explode等UDTF一起使用,它能够将一行数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。lateral view首先为原始表的每行调用UDTF,UTDF会把一行拆分成一或者多行,lateral view再把结果组合,产生一个支持别名表的虚拟表。
例子
假设我们有一张表pageAds,它有两列数据,第一列是pageid string,第二列是adid_list,即用逗号分隔的广告ID集合:
string pageid Array<int> adid_list
"front_page" [1, 2, 3]
"contact_page" [3, 4, 5]
要统计所有广告ID在所有页面中出现的次数。
首先分拆广告ID:
Sql代码 收藏代码
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
接着是一个聚合的统计:
Sql代码 收藏代码
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"]
Sql代码 收藏代码
SELECT myCol1, col2 FROM baseTableLATERAL 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:
Sql代码 收藏代码
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"
注意上面语句中,两个lateral view按照出现的次序被执行。*
因为直接在SELECT使用UDTF会存在限制,即仅仅能包含单个字段,如下:
hive> select my_test(“abcef:aa”) as qq,my_test(“abcef:aa”) as ww from sunwg01;
FAILED: Error in semantic analysis: Only a single expression in the SELECT clause is supported with UDTF’s
hive> select my_test(“abcef:aa”) as qq,’abcd’ from sunwg01;
FAILED: Error in semantic analysis: Only a single expression in the SELECT clause is supported with UDTF’s
不光是多个UDTF,仅仅单个UDTF加上其他字段也是不可以,hive提示在UDTF中仅仅能有单一的表达式。
Sql代码 收藏代码
lateralView: LATERAL VIEW udtf(expression) tableAlias AS columnAlias (',' columnAlias)*
fromClause: FROM baseTable (lateralView)*
描述
lateral view用于和split, explode等UDTF一起使用,它能够将一行数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。lateral view首先为原始表的每行调用UDTF,UTDF会把一行拆分成一或者多行,lateral view再把结果组合,产生一个支持别名表的虚拟表。
例子
假设我们有一张表pageAds,它有两列数据,第一列是pageid string,第二列是adid_list,即用逗号分隔的广告ID集合:
string pageid Array<int> adid_list
"front_page" [1, 2, 3]
"contact_page" [3, 4, 5]
要统计所有广告ID在所有页面中出现的次数。
首先分拆广告ID:
Sql代码 收藏代码
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
接着是一个聚合的统计:
Sql代码 收藏代码
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"]
Sql代码 收藏代码
SELECT myCol1, col2 FROM baseTableLATERAL 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:
Sql代码 收藏代码
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"
注意上面语句中,两个lateral view按照出现的次序被执行。*
发表评论
-
hive + hbase
2015-01-04 10:42 783环境配置: hadoop-2.0.0-cdh4.3.0 (4 ... -
hive 数据倾斜
2014-08-27 09:03 697链接:http://www.alidata.org/archi ... -
hive 分通总结
2014-08-27 08:42 609总结分析: 1. 定义了桶,但要生成桶的数据,只能是由其他表 ... -
深入了解Hive Index具体实现
2014-08-25 08:51 750索引是标准的数据库技术,hive 0.7版本之后支持索引。hi ... -
explain hive index
2014-08-24 16:44 1160设置索引: 使用聚合索引优化groupby操作 hive> ... -
Hive 中内部表与外部表的区别与创建方法
2014-08-15 17:11 771分类: Hive 2013-12-07 11:56 ... -
hive map和reduce的控制
2014-08-15 16:14 632一、 控制hive任务中的map数: 1. 通 ... -
hive 压缩策略
2014-08-15 15:16 1776Hive使用的是Hadoop的文件 ... -
hive 在mysql中创建备用数据库
2014-08-15 09:21 895修改hive-site.xml <property> ... -
HIVE 窗口及分析函数
2014-08-11 16:21 1199HIVE 窗口及分析函数 使 ... -
hive 内置函数
2014-08-11 09:06 30821.sort_array(): sort_array(arra ... -
hive数据的导出
2014-07-28 21:53 455在本博客的《Hive几种数据导入方式》文章中,谈到了Hive中 ... -
hive udaf
2014-07-25 16:11 769package com.lwz.udaf; import o ... -
hive自定义InputFormat
2014-07-25 09:13 877自定义分隔符 package com.lwz.inputf; ... -
HiveServer2连接ZooKeeper出现Too many connections问题的解决
2014-07-24 08:49 1796HiveServer2连接ZooKeeper出现Too man ... -
hive 常用命令
2014-07-17 22:22 7161.hive通过外部设置参数传入脚本中: hiv ... -
CouderaHadoop中hive的Hook扩展
2014-07-16 21:18 3383最近在做关于CDH4.3.0的hive封装,其中遇到了很多问题 ... -
利用SemanticAnalyzerHook回过滤不加分区条件的Hive查询
2014-07-16 16:43 1477我们Hadoop集群中将近百分之80的作业是通过Hive来提交 ... -
hive 的常用命令
2014-07-16 10:07 0设置、查看hive当前的角色: set sys ... -
hive 授权
2014-07-15 10:51 942Hive授权(Security配置) 博客分类: Hive分 ...
相关推荐
在处理分隔符分隔的数组数据时,Hive 提供了一种称为 `lateral view` 的机制,配合 `explode` 函数可以将单一记录中的数组元素拆分成多条记录。本文主要探讨如何在 Python 中模拟实现 Hive 的 `lateral view explode...
Lateral View Explode 是 Hive 中的一种功能强大的函数,它可以将一个数组或结构体类型的数据展开成多行,以便于更好地处理数据仓库中的数据。然而,很多人可能并不了解 Lateral View Explode 的实现机理和应用场景...
09.hive内置函数--表生成函数--行转列explode--lateral-view.mp4
Hive SQL查询中使用了`LATERAL VIEW`关键字,这是Hive中处理复杂数据类型的强大工具。`LATERAL VIEW`与`EXPLODE`函数一起使用,可以将数组或映射中的元素展开成多行,使得每个元素都能在单独的行中展示。比如,在...
内部表和外部表,导入数据,导出数据,将数据从hive的表中导出到本地磁盘目录中,HIVE的存储文件格式,修改表的分区,多重插入,HIVE的自定义函数功能,使用explode —— 行转列,配合lateral view 列转行方便统计,...
LATERAL VIEW explode(split(text, ' ')) lTable AS word GROUP BY word; ``` 此查询首先通过 `split` 函数将文档中的文本按照空格分割,然后使用 `explode` 函数将每个单词展开为单独的行,最后按照单词进行分组并...
在 Hive 中,可以使用多种函数来拆解字段,本文将详细介绍四种常用的函数:SPLIT、SUBSTRING_INDEX、REGEXP_REPLACE 和 LATERAL VIEW explode。 1. SPLIT 函数 SPLIT 函数用于将一个字符串按照指定的分隔符拆分成...
HQL 支持 SELECT、FROM、WHERE、GROUP BY、JOIN 等基本操作,同时也支持一些大数据特有的功能,如 LATERAL VIEW、UDF(用户自定义函数)、UDAF(用户自定义聚合函数)和 UDTF(用户自定义表生成函数)。 5. **Hive ...
HQL支持SELECT、FROM、WHERE、GROUP BY、JOIN等标准SQL操作,同时也提供了适合大数据处理的特殊函数,如LATERAL VIEW、OVER()窗口函数等。 4. **数据分区与桶**:为了提高查询性能,Hive支持数据分区(Partitioning...
- **实现**:将JSON数据作为字符串导入Hive表中,使用UDF函数(如LATERAL VIEW json_tuple)进行解析。 #### 方法二:使用第三方SerDe - **实现**:在导入前使用第三方库(例如JsonSerDe)解析JSON数据,确保导入的...
- **UDTF (User Defined Table Generating Functions)**:如 `explode`, `split` 等,配合 `LATERAL VIEW` 可以将一行数据拆分成多行,便于进一步处理。 2. **函数示例**: - **类型转换**:`cast(1.5 as int)` ...
但是,Hive 3.1版本后已不再支持UDTF,推荐使用Lateral View与UDTF类似功能。 综上所述,自定义Hive函数(UDF、UDAF)极大地增强了Hive的功能,使其能处理各种复杂的业务逻辑,适应不同的数据处理需求。开发和使用...
- Hive 支持处理 JSON 数据,但需要借助 UDF(用户自定义函数)如 LATERAL VIEW 或使用 Hive 的内置 JSON 解析函数进行解析。 理解并掌握这些知识点对于在大数据面试中展示对Hive的深入理解和应用能力至关重要。...
用法:LATERAL VIEW udtf(expression) tableAlias AS columnAlias 解释:用于和 split, explode 等 UDTF 一起使用,它能够将一列数据拆成多行数据,在此 基础上可以对拆分后的数据进行聚合。 2.数据准备 move_...
- 可能需要使用`LATERAL VIEW`和`EXPLODE`函数处理多值字段,如`Referer`和`User-Agent`。 3. **数据加载与清洗**: - 将Apache日志文件上传到HDFS,然后使用`LOAD DATA`命令将其加载到Hive表中。 - 数据清洗...
`lateral view`是Hive中的一个功能,用于对一列中的集合元素进行展开,可以配合UDTF(用户定义的转换函数)一起使用,将一行数据转化为多行。 ### 2.7 行列转换函数 Hive提供`stack()`函数进行行列转换,将列数据...
- **侧视图(Lateral view)** - **子查询(Subqueries in from clause)** - **多表插入(Multi-table Insert)** - **多分组(Multi-group-by)** - **采样(Sampling)** 这些功能极大地增强了Hive的灵活性和...
8. **使用LATERAL VIEW**:对于复杂结构数据,使用LATERAL VIEW可以简化查询。 9. **减少嵌套子查询**:过多的嵌套子查询会降低查询效率。 10. **使用BROADCAST JOIN**:对于较小的表,使用BROADCAST JOIN可以减少...
lateral view json_tuple(a.json, 'name', 'age', 'sex') b as name, age, sex; ``` 这两种方法都可以读取 JSON 格式数据,但是它们都会启动一个 Job,效率较慢。 注意 在使用 Hive 支持 JSON 格式的数据时,需要...