当前位置: 首页 > news >正文

hive sql 遇到的一些函数使用

1. cast(字段 as 需要转化为的类型)

举例:有一个test表,其中有三个字段

test表
idbigint
namevarchar(256)
ageint

select cast(age as bigint) as col1 from test limit  100;

查询的SQL中使用了cast(age as int)表示我将表中原本类型为int的值转为bigint类型,类似于强制类型转换

注:从Hive0.12.0开始支持varchar

2. get_json_object(字段, '$.字段的字段')或get_json_object(字段, '$.字段的字段[i]')

举例:还是test表,现在有四个字段

其中introduce字段中存储的值都是如下格式:

{"col1":"hello world","col2":[1,2],"col3":{"col31":"key1","col32":"key2"}
}

单层:select get_json_object(introduce, '$.col1') from test;

解释:其中get_json_object(introduce, '$.col1')表示从introduce字段中取出名为col1对应的值,即"hello world"

嵌套:select get_json_object(introduce, '$.col3.col31') from test;

解释:其中get_json_object(introduce, '$.col3.col31')表示从introduce字段中取出名为col3中col31对应的值,即"key1"

数组:select get_json_object(introduce, '$.col2[1]') from test;

解释:其中get_json_object(introduce, '$.col2[1]')表示从introduce字段中取出名为col2数组中第二个值,即1

3. date_format(FROM_UNIXTIME(表的某个数值,必须是秒级别), '要求转为的格式')

举例:test表,现在有两个字段

time_stamp存储了秒级别的时间戳(如果是bigint,存储了毫秒级别的时间戳,将值/1000转为秒级别即可)

select cast(date_format(FROM_UNIXTIME(time_stamp), 'yyyyMM') as int) as day from test;

解释:其中FROM_UNIXTIME会将时间由数字转为日期,然后使用date_format将该日期转为'yyyyMM'类型的数据,最后使用cast将该字段类型转为int。

4. replace(进行操作的字段, '字段中需要被替换的部分', '替换后的部分')

举例:test表,现在有两个字段

select replace(name, '·', '') as rep from test

解释:将test表中的name字段中·全部替换掉。

5. split(需要被拆分成数据的字段, '字段被拆分成array的中间点')

举例:test表,现在有两个字段

select split(name, '!') as arr from test

解释:如果name字段中的值有【!】,比如【hello!world】那么会被拆成一个包含有两个值的array:["hello", "world"]

6. explode(需要被行转列的array)

还是上面的例子,现在的表具体为:

test表
idname
1小明,小红
2小王

select id, explode(split(name, ',')) as exp from test

执行后为

 解释:explode函数会将一个array或是map从一行拆为多行,即由行转列

注:仅使用explode的局限:

  1. 不能关联原有的表中的其他字段。
  2. 不能与group by、cluster by、distribute by、sort by联用。
  3. 不能进行UDTF嵌套。
  4. 不允许选择其他表达式。

7. lateral view udtf函数 tableAlias AS columnAlias

lateral view 要与UDTF(user defined table-generating functions)函数一起使用,这里的udft用上面的explode举例,lateral view 会将utdf函数应用到每一行上,经utdf处理后得到多行输出组建成一张虚拟表。

还是这张表:

test表
idname
1小明,小红
2小王

SELECT id, name
FROM test LATERAL VIEW explode(split(name, ',')) test_demo AS exp;

解释: LATERAL VIEW会将经过UDTF函数处理的内容投射到一张虚拟表上,我们就可以再对这个虚拟表进行各种操作了。

相关文章:

  • elementui el-upload 上传文件
  • 引擎系统设计思路 - 用户态与系统态隔离
  • LeetCode 501. 二叉搜索树中的众数【二叉搜索树中序遍历+Morris遍历】简单
  • PHP服务器端电商API原理及示例讲解(电商接口开发/接入)
  • diffusers-Load pipelines,models,and schedulers
  • #stm32整理(一)flash读写
  • pytorch 笔记:GRU
  • 0基础学习PyFlink——使用DataStream进行字数统计
  • Java操作word
  • 服务器遭受攻击如何处理(记录排查)
  • Redis入门02-基础概念
  • 分类预测 | Matlab实现KOA-CNN-BiLSTM-selfAttention多特征分类预测(自注意力机制)
  • 亲测解决Pytorch TypeError: object of type ‘numpy.int64‘ has no len()
  • 微服务框架SpringcloudAlibaba+Nacos集成RabbitMQ
  • C语言assert函数:什么是“assert”函数
  • [Vue CLI 3] 配置解析之 css.extract
  • 3.7、@ResponseBody 和 @RestController
  • Java超时控制的实现
  • JSONP原理
  • LeetCode算法系列_0891_子序列宽度之和
  • Vue.js-Day01
  • 给Prometheus造假数据的方法
  • 如何选择开源的机器学习框架?
  • 物联网链路协议
  • 小程序开发之路(一)
  • 一起参Ember.js讨论、问答社区。
  • 一天一个设计模式之JS实现——适配器模式
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 在Unity中实现一个简单的消息管理器
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • 选择阿里云数据库HBase版十大理由
  • #Z2294. 打印树的直径
  • (2)nginx 安装、启停
  • (libusb) usb口自动刷新
  • (笔试题)分解质因式
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (二)c52学习之旅-简单了解单片机
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (一)Mocha源码阅读: 项目结构及命令行启动
  • (转)甲方乙方——赵民谈找工作
  • **python多态
  • .NET CF命令行调试器MDbg入门(一)
  • .NET 反射 Reflect
  • .net操作Excel出错解决
  • .NET与java的MVC模式(2):struts2核心工作流程与原理
  • /etc/skel 目录作用
  • @EnableConfigurationProperties注解使用
  • @Transactional 竟也能解决分布式事务?
  • [ C++ ] STL---仿函数与priority_queue
  • [8-27]正则表达式、扩展表达式以及相关实战
  • [Android] Android ActivityManager