`
yugouai
  • 浏览: 497562 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

HIVE lateral view

 
阅读更多

Lateral View语法

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:

 

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

接着是一个聚合的统计:

 

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"]
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:

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 编程指南 完整版

    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