前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >json_tuple一定比 get_json_object更高效吗?

json_tuple一定比 get_json_object更高效吗?

作者头像
数据仓库践行者
发布2021-04-26 15:02:20
2.5K0
发布2021-04-26 15:02:20
举报

要理性的比较json_tuple和get_json_object的效率,最近有朋友问我:hive中取多个key时,为什么用了json_tuple,效率反而比get_json_object慢了一些?

先看一下网上的结论:

上面是搜索网上的结论的截图,基本都会认为json_tuple比get_json_object高效,理由是:取多个key值时,json_tuple只解析一次,而get_json_object需要解析多次。

我们来看实际情况:

1、get_json_object缓存jsonObject (并非无脑解析多次)

一般情况下,由json字符串序列化成jsonObject这个过程是最耗费时间的。从代码中可以看到,get_json_object函数会缓存jsonObject,也就是说json字符串转化为jsonObject的过程只有一次。并不是解析多次。

2、执行计划层面(get_json_object更简洁,json_tuple更繁重)

从下图中可以看到,get_json_object的执行计划,只有一个selectOperator ,非常简单

而json_tuple是属于udtf函数,中间会有udtf相关的operator

详情可以参考:你真的了解Lateral View explode吗? 这篇

执行计划图大概是这个样子:

图是从 你真的了解Lateral View explode吗? 中取的,不太合适,但基本流程是一样的

json_tuple在这个过程中也是有一定的性能损耗的

3、从功能多样性来看(这个和性能无关啦)

get_json_object方法可以处理的 path更为丰富,能够支持正则、支持嵌套、取多层等。

而json_tuple简单粗暴,只能解析第一层key

以上,我们在实际用的时候,不要盲从,用get_json_object也是没关系的,况且正常情况下,一次也不会取成千上万个key值... 重要的是要保证,我们的json字符串一定不要存的太长,太大,这样的话,不管用哪个函数,效率都不会好

Hey!

我是小萝卜算子

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-04-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据仓库践行者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档