`
乡里伢崽
  • 浏览: 112920 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

hive lateral view

    博客分类:
  • hive
 
阅读更多
通过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按照出现的次序被执行。*
分享到:
评论

相关推荐

    python 实现 hive中类似 lateral view explode的功能示例

    在处理分隔符分隔的数组数据时,Hive 提供了一种称为 `lateral view` 的机制,配合 `explode` 函数可以将单一记录中的数组元素拆分成多条记录。本文主要探讨如何在 Python 中模拟实现 Hive 的 `lateral view explode...

    源码复盘 你真的了解Lateral View explode吗.docx

    Lateral View Explode 是 Hive 中的一种功能强大的函数,它可以将一个数组或结构体类型的数据展开成多行,以便于更好地处理数据仓库中的数据。然而,很多人可能并不了解 Lateral View Explode 的实现机理和应用场景...

    09.hive内置函数--表生成函数--行转列explode--lateral-view.mp4

    09.hive内置函数--表生成函数--行转列explode--lateral-view.mp4

    hive环境搭建和建表加载数据

    Hive SQL查询中使用了`LATERAL VIEW`关键字,这是Hive中处理复杂数据类型的强大工具。`LATERAL VIEW`与`EXPLODE`函数一起使用,可以将数组或映射中的元素展开成多行,使得每个元素都能在单独的行中展示。比如,在...

    hive-笔记--hive常用用法

    内部表和外部表,导入数据,导出数据,将数据从hive的表中导出到本地磁盘目录中,HIVE的存储文件格式,修改表的分区,多重插入,HIVE的自定义函数功能,使用explode —— 行转列,配合lateral view 列转行方便统计,...

    数据分析系统Hive

    LATERAL VIEW explode(split(text, ' ')) lTable AS word GROUP BY word; ``` 此查询首先通过 `split` 函数将文档中的文本按照空格分割,然后使用 `explode` 函数将每个单词展开为单独的行,最后按照单词进行分组并...

    hive sql 拆解字段.docx

    在 Hive 中,可以使用多种函数来拆解字段,本文将详细介绍四种常用的函数:SPLIT、SUBSTRING_INDEX、REGEXP_REPLACE 和 LATERAL VIEW explode。 1. SPLIT 函数 SPLIT 函数用于将一个字符串按照指定的分隔符拆分成...

    设计开发 Hive 编程指南 完整版

    HQL 支持 SELECT、FROM、WHERE、GROUP BY、JOIN 等基本操作,同时也支持一些大数据特有的功能,如 LATERAL VIEW、UDF(用户自定义函数)、UDAF(用户自定义聚合函数)和 UDTF(用户自定义表生成函数)。 5. **Hive ...

    apache-hive-3.1.2-bin.tar.zip

    HQL支持SELECT、FROM、WHERE、GROUP BY、JOIN等标准SQL操作,同时也提供了适合大数据处理的特殊函数,如LATERAL VIEW、OVER()窗口函数等。 4. **数据分区与桶**:为了提高查询性能,Hive支持数据分区(Partitioning...

    hive面试题(Hadoop)

    - **实现**:将JSON数据作为字符串导入Hive表中,使用UDF函数(如LATERAL VIEW json_tuple)进行解析。 #### 方法二:使用第三方SerDe - **实现**:在导入前使用第三方库(例如JsonSerDe)解析JSON数据,确保导入的...

    Hive常用函数

    - **UDTF (User Defined Table Generating Functions)**:如 `explode`, `split` 等,配合 `LATERAL VIEW` 可以将一行数据拆分成多行,便于进一步处理。 2. **函数示例**: - **类型转换**:`cast(1.5 as int)` ...

    自定义hive函数

    但是,Hive 3.1版本后已不再支持UDTF,推荐使用Lateral View与UDTF类似功能。 综上所述,自定义Hive函数(UDF、UDAF)极大地增强了Hive的功能,使其能处理各种复杂的业务逻辑,适应不同的数据处理需求。开发和使用...

    大数据面试二:hive

    - Hive 支持处理 JSON 数据,但需要借助 UDF(用户自定义函数)如 LATERAL VIEW 或使用 Hive 的内置 JSON 解析函数进行解析。 理解并掌握这些知识点对于在大数据面试中展示对Hive的深入理解和应用能力至关重要。...

    hive列转行案例

    用法:LATERAL VIEW udtf(expression) tableAlias AS columnAlias 解释:用于和 split, explode 等 UDTF 一起使用,它能够将一列数据拆成多行数据,在此 基础上可以对拆分后的数据进行聚合。 2.数据准备 move_...

    Apache标准Log,Hive测试使用

    - 可能需要使用`LATERAL VIEW`和`EXPLODE`函数处理多值字段,如`Referer`和`User-Agent`。 3. **数据加载与清洗**: - 将Apache日志文件上传到HDFS,然后使用`LOAD DATA`命令将其加载到Hive表中。 - 数据清洗...

    第5章:Hive函数重要应用案例1

    `lateral view`是Hive中的一个功能,用于对一列中的集合元素进行展开,可以配合UDTF(用户定义的转换函数)一起使用,将一行数据转化为多行。 ### 2.7 行列转换函数 Hive提供`stack()`函数进行行列转换,将列数据...

    基于Facebook的Hive开发

    - **侧视图(Lateral view)** - **子查询(Subqueries in from clause)** - **多表插入(Multi-table Insert)** - **多分组(Multi-group-by)** - **采样(Sampling)** 这些功能极大地增强了Hive的灵活性和...

    Hive调优全方位指南.docx

    8. **使用LATERAL VIEW**:对于复杂结构数据,使用LATERAL VIEW可以简化查询。 9. **减少嵌套子查询**:过多的嵌套子查询会降低查询效率。 10. **使用BROADCAST JOIN**:对于较小的表,使用BROADCAST JOIN可以减少...

    hive支持json格式的数据.docx

    lateral view json_tuple(a.json, 'name', 'age', 'sex') b as name, age, sex; ``` 这两种方法都可以读取 JSON 格式数据,但是它们都会启动一个 Job,效率较慢。 注意 在使用 Hive 支持 JSON 格式的数据时,需要...

Global site tag (gtag.js) - Google Analytics