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 条件的连接,相同)并使用
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 的数组连接表爆炸