Hive 使用总结
1 带分区列的表更改列类型
常见的一个场景是Hive里面一个带分区的表,原来是int类型的字段,后来发现数据超过了int的最大值,要改成bigint。或者是bigint要改string或decimal。无论如何,对于带分区的表,要改列类型,有一个坑:
如果使用alter table t change column oldcol newcol bigint,即把int类型的oldcol改为bigint类型的newcol 这个时候,去读数据,应该还是NULL的。 这是因为每个分区Hive还会存一份元数据,于是两种解决方案: 一个是alter table t change column oldcol newcol bigint cascade 一个是alter table t change column oldcol newcol bigint, alter table t partition(...) change column oldcol newcol bigint
2 left join 问题(hive/mysql通用)
在left join语句中,左表过滤必须放where条件中,右表过滤必须放on条件中,这样结果才能不多不少,刚刚好。
3 行转列
曾经一个场景使用过的
select plan_id,id,
concat_ws('',collect_set(if(user_type=1,user_id,''))) teacher_id,
concat_ws('',collect_set(if(user_type=0,user_id,''))) student_id,
concat_ws('',collect_set(if(user_type=1,count,''))) t_count,
concat_ws('',collect_set(if(user_type=0,count,''))) s_count
from tmp.table_name
group by plan_id,id
4 json字符串解析
好像是网上找的
一个Map结构嵌套了Map,再嵌套了一个数组结构。
{"username":"king","actionInfo":{"id":1,"age":"22","partList":[{"code":"123","uname":"king"},{"code":"0012","uname":"king"}]}} 通过json_tuple, get_json_object,explode等函数将string类型解析出来,使用正则的方式,将中括号替换掉,然后在转化为数组
select username,ai.id,ai.age,p.uname,p.code from test1
lateral view json_tuple(actioninfo,'id','age','partlist') ai as id,age,partlist
lateral view explode(split(regexp_replace(regexp_extract(partlist,'^\\[(.+)\\]$',1),'\\}\\,\\{', '\\}\\|\\|\\{'),'\\|\\|')) partlist as p
lateral view json_tuple(p,'code','uname') p as code,uname
5 四舍五入函数
round() 遵循四舍五入把原值转化为指定小数位数,如:round(1.45,0) = 1;round(1.55,0)=2
floor()向下舍入为指定小数位数 如:floor(1.45,0)= 1;floor(1.55,0) = 1
ceiling()向上舍入为指定小数位数 如:ceiling(1.45,0) = 2;ceiling(1.55,0)=2
Hive 使用总结的更多相关文章
- 初识Hadoop、Hive
2016.10.13 20:28 很久没有写随笔了,自打小宝出生后就没有写过新的文章.数次来到博客园,想开始新的学习历程,总是被各种琐事中断.一方面确实是最近的项目工作比较忙,各个集群频繁地上线加多版 ...
- Hive安装配置指北(含Hive Metastore详解)
个人主页: http://www.linbingdong.com 本文介绍Hive安装配置的整个过程,包括MySQL.Hive及Metastore的安装配置,并分析了Metastore三种配置方式的区 ...
- Hive on Spark安装配置详解(都是坑啊)
个人主页:http://www.linbingdong.com 简书地址:http://www.jianshu.com/p/a7f75b868568 简介 本文主要记录如何安装配置Hive on Sp ...
- HIVE教程
完整PDF下载:<HIVE简明教程> 前言 Hive是对于数据仓库进行管理和分析的工具.但是不要被“数据仓库”这个词所吓倒,数据仓库是很复杂的东西,但是如果你会SQL,就会发现Hive是那 ...
- 基于Ubuntu Hadoop的群集搭建Hive
Hive是Hadoop生态中的一个重要组成部分,主要用于数据仓库.前面的文章中我们已经搭建好了Hadoop的群集,下面我们在这个群集上再搭建Hive的群集. 1.安装MySQL 1.1安装MySQL ...
- hive
Hive Documentation https://cwiki.apache.org/confluence/display/Hive/Home 2016-12-22 14:52:41 ANTLR ...
- 深入浅出数据仓库中SQL性能优化之Hive篇
转自:http://www.csdn.net/article/2015-01-13/2823530 一个Hive查询生成多个Map Reduce Job,一个Map Reduce Job又有Map,R ...
- Hive读取外表数据时跳过文件行首和行尾
作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 有时候用hive读取外表数据时,比如csv这种类型的,需要跳过行首或者行尾一些和数据无关的或者自 ...
- Hive索引功能测试
作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 从Hive的官方wiki来看,Hive0.7以后增加了一个对表建立index的功能,想试下性能是 ...
- 轻量级OLAP(二):Hive + Elasticsearch
1. 引言 在做OLAP数据分析时,常常会遇到过滤分析需求,比如:除去只有性别.常驻地标签的用户,计算广告媒体上的覆盖UV.OLAP解决方案Kylin不支持复杂数据类型(array.struct.ma ...
随机推荐
- body-parser 源码分析
body-parser 源码分析 预备知识:熟悉 express 的中间件逻辑 阅读事件:30min 1. body-parser 解决什么问题 在 node http 模块中,您只能通过 data ...
- docker学习之路(安装、使用)
一.docker安装 1.更新现有的yum包 yum update 2.配置docker yum源 [root@docker ~]# cat /etc/yum.repos.d/docker.repo ...
- hive 将hive表数据查询出来转为json对象和json数组输出
一.将hive表数据查询出来转为json对象输出 1.将查询出来的数据转为一行一行,并指定分割符的数据 2.使用UDF函数,将每一行数据作为string传入UDF函数中转换为json再返回 1.准备数 ...
- 文档驱动开发模式在 AIMS 中的应用与实践
摘要:程序员常会说:我最讨厌别人写的代码没有文档,我也最讨厌自己需要写文档. 有一个很老的梗: 我最讨厌别人写的代码没有文档,我也最讨厌自己需要写文档. 有这种想法的程序员应该算是一个老鸟了,对于大多 ...
- vue 过滤器 filter 的使用
1.局部过滤器的使用 比如性别,订单状态的数据,后端一般返回数字来代替状态.以性别为模拟数据,0是未知,1是男,2是女. 直接数据渲染出来,只有012,没有性别 根据后端返回的int类型值,前端对数据 ...
- Golang字符串是否存在于切片或数组中的小工具(基本等同于python in语法)
// golang中是没有判断字符串是否存在数组或切片里的内置方法, 所以我们可以自己搞一个快速小组件 func Find(slice []string, val string) (int, bool ...
- appium元素识别方式实战
github代码:: https://github.com/w550856163/App_Demo.git tag: V1.1 Appium Inspector定位工具界面介绍: Selecte ...
- o_direct刷新方式和文件系统支持Direct i/o
若让innodb使用o_direct刷新方式,文件系统支持Direct i/o 是非常重要的.为啥
- mysql的导入
方法1 load data [local] infile 'filename' into table tablename[option] ields terminated by 'string'(字段 ...
- os.system('cmd')在linux和windows系统下返回值的差异
今天,用os.system('cmd')分别在windows和linux平台上执行同一ping命令,命令执行失败时返回码不同,windows为1,而linux下返回为256,如下: linux下: & ...