hive中lateral view json_tuple的用法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hive中lateral view json_tuple的用法相关的知识,希望对你有一定的参考价值。

参考技术A select * from t1 lateral view json_tuple(t1.info,'apply_time','pro_code') t2 as apply_time,pro_code
意思是:t1中的info信息通过lateral view进行进行解析。
lateral view:如果指定字段名则需要把lateral view查询出的列写到select中,才能在结果中出现;如果直接是select * 则自动会把lateral view查询出的列追加在后面。

要确保被解析的字段是string类型才可以使用json解析.解析map类型不能使用json解析,解析map类型可以使用col_name['key']获取对应key的value.

hive解析json\tuple网址:
https://blog.csdn.net/u010002184/article/details/89639422

hive解析json网址:
https://blog.csdn.net/qq_34105362/article/details/80454697

Hive:使用没有 LATERAL VIEW 的数组连接表爆炸

【中文标题】Hive:使用没有 LATERAL VIEW 的数组连接表爆炸【英文标题】:Hive: join tables with array without LATERAL VIEW explode 【发布时间】:2019-03-20 10:03:44 【问题描述】:

我已经搜索了在 hive 上使用数组 coumn 连接表的方法,但所有答案都建议使用 LATERAL view EXPLODE。

我想得到如下数据;

+---------+----------+----------+
|  name   | type_id  | spend_sum|
+---------+----------+----------+
| john    |  9       |   100    | 
+---------+----------+----------+
| ben     |  9       |   350    |
+---------+----------+----------+
| ben     |  8       |   350    |
+---------+----------+----------+

来自以下 2 个表格;

表1

+----------+---------------+-----------------+---------+----------+
| order_id | value(array)  |  item_id(array) | name    | spend    |
+----------+---------------+-----------------+---------+----------+
| 1        | [1]           |   [11]          | john    | 100      |
+----------+---------------+-----------------+---------+----------+
| 2        | [2,3]         |  [12,13]        | ben     | 200      |
+----------+---------------+-----------------+---------+----------+
| 3        | [1,2]         |  [11,12]        | ben     | 150      |
+----------+---------------+-----------------+---------+----------+

表2

+---------+------------------+---------------+
|  value  | item_id(bigint)  |  type_id(int) |
+---------+------------------+---------------+
| 1       |  11              |    9          | 
+---------+------------------+---------------+
| 2       |  12              |    8          |
+---------+------------------+---------------+
| 3       |  13              |    9          |
+---------+------------------+---------------+

请帮帮我。

【问题讨论】:

【参考方案1】:

您可以使用 array_contains(Array<T>, value) 加入,但在 Hive 中不允许不等式加入。因此,您可以进行交叉连接(或不使用 ON 条件的连接,相同)并使用

过滤乘以 CROSS JOIN 的行

WHERE array_contains(t1.value, t2.value)

array_contains() 是一个布尔函数,因此您可以在 WHERE 子句中使用它而无需附加条件。

但是根据您的表大小,对分解值使用explode+join 的解决方案可能会执行得更好,因为交叉连接将一个表中的所有行乘以第二个表中的所有行。

【讨论】:

以上是关于hive中lateral view json_tuple的用法的主要内容,如果未能解决你的问题,请参考以下文章

hive中lateral view json_tuple的用法

Hive学习之Lateral View

Hive行转列(explode/lateral view)

Hive:使用没有 LATERAL VIEW 的数组连接表爆炸

hive函数--02---split() lateral view explode() posexplode()

hive函数之~hive当中的lateral view 与 explode