hive sql常用整理-hive引擎设置
遇到个情况,跑hive级联insert数据报错,可以尝试换个hive计算引擎
hive遇到FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask错误
、配置mapreduce计算引擎
set hive.execution.engine=mr; 、配置spark计算引擎
set hive.execution.engine=spark; 、配置tez 计算引擎
set hive.execution.engine=tez;
hive的sql操作与musql些许区别,比如hive没有group_concat,取而代之的是collect_set;hive不能使用子查询等,以下是常用操作:
添加分区
ALTER TABLE table_name ADD PARTITION (partCol = 'value1') location 'loc1'; //示例
ALTER TABLE table_name ADD IF NOT EXISTS PARTITION (dt='20130101') LOCATION '/user/hadoop/warehouse/table_name/dt=20130101'; //一次添加一个分区
例:
ALTER TABLE $abc$ ADD IF NOT EXISTS PARTITION(p_provincecode=$abc.p_provincecode$,p_year=$abc.p_year$,p_month=$abc.p_month$) LOCATION '/hadoop路径/p_provincecode=$abc.p_provincecode$/p_year=$abc.p_year$/p_month=$abc.p_month$/'
ALTER TABLE page_view ADD PARTITION (dt='2008-08-08', country='us') location '/path/to/us/part080808' PARTITION (dt='2008-08-09', country='us') location '/path/to/us/part080809'; //一次添加多个分区
删除分区
ALTER TABLE login DROP IF EXISTS PARTITION (dt='2008-08-08');
ALTER TABLE page_view DROP IF EXISTS PARTITION (dt='2008-08-08', country='us');
修改分区
ALTER TABLE table_name PARTITION (dt='2008-08-08') SET LOCATION "new location";
ALTER TABLE table_name PARTITION (dt='2008-08-08') RENAME TO PARTITION (dt='20080808');
添加列(字段)
ALTER TABLE table_name ADD COLUMNS (col_name STRING); //在所有存在的列后面,但是在分区列之前添加一列
修改列
CREATE TABLE test_change (a int, b int, c int);
/* will change column a's name to a1*/
ALTER TABLE test_change CHANGE a a1 INT;
修改列的顺序
ALTER TABLE table_name CHANGE col_old_name col_new_name column_type AFTER column_name;
/* will change column a's name to a1, a's data type to string, and put it after column b. The new table's structure is: b int, a1 string, c int*/
ALTER TABLE test_change CHANGE a a1 STRING AFTER b;
/* will change column b's name to b1, and put it as the first column. The new table's structure is: b1 int, a int, c int*/
ALTER TABLE test_change CHANGE b b1 INT FIRST;
hive删除字段
ALTER TABLE wireless_union_data_export_part1 REPLACE COLUMNS();
修改表属性
alter table table_name set TBLPROPERTIES ('EXTERNAL'='TRUE'); //内部表转外部表
alter table table_name set TBLPROPERTIES ('EXTERNAL'='FALSE'); //外部表转内部表
表的重命名
ALTER TABLE table_name RENAME TO new_table_name
gbase修改字段只能先删掉字段,然后再添加
gbase删除字段
alter table table_name drop 字段名
gbase添加字段
alter table table_name add COLUMN col_name STRING;
gbase清除表数据不删除表
delete 表名
常用函数
1.isnull(string a) --如果a是null,返回flase,如果啊不为空,返回true
2.ROUND(double a)四舍五入bigint类型
CEILING --舍入到最大整数 3.33舍入到4 2.98舍入到3 -3.61舍入到-3
FLOOR() --舍入到最小整数 3.33舍入到3 2.98舍入到2 -3.61舍入到-4
3.map(key1, value1, key2, value2, …)通过指定的键/值对,创建一个map
4.cast(expr as <type>)类型转换。例如将字符”1″转换为整数:cast(’1′ as bigint),如果转换失败返回NULL。
例:CAST(num*100 AS decimal(8,0)) as num
5.unix_timestamp() --如果不带参数的调用,返回一个Unix时间戳(从’1970- 01 – 0100:00:00′到现在的UTC秒数)
--指定日期参数调用UNIX_TIMESTAMP(),它返回参数值’1970- 01 – 0100:00:00′到指定日期的秒数
unix_timestamp(string date, string pattern) --指定时间输入格式,返回到1970年秒数:unix_timestamp(’2009-03-20′, ‘yyyy-MM-dd’) = 1237532400
from_unixtime(bigint unixtime[, string format])
例:select from_unixtime(1505750400,'%Y-%m-%d %H-%i-%S');
--UNIX_TIMESTAMP参数表示返回一个值’YYYY- MM – DD HH:MM:SS’或YYYYMMDDHHMMSS.uuuuuu格式,这取决于是否是在一个字符串或数字语境中
to_date(string timestamp) --返回时间中的年月日: to_date(“1970-01-01 00:00:00″) = “1970-01-01″
to_dates(string date) --给定一个日期date,返回一个天数(0年以来的天数)
year、month、day、hour、minute、second、weekofyear --日期转年、转月…………
hour --返回指定时间的小时,范围为0-23
weekofyear(string date) --返回指定日期所在一年中的星期号,范围0到53
datediff('string enddate','string startdate') --两个时间参数的日期之差
DATEDIFF ( date-part, date-expression-1, date-expression-2 ) --返回两个日期之间的间隔
date-part : year | quarter | month | week | day | hour | minute | second | millisecond
sec_to_time(秒) --将秒转化成时间
time_to_sec(时间) --将时间转化为秒
date_add(string startdate,int days) --给定时间,在此基础上加上指定的时间段
date_sub(string startdate,int days) --给定时间,在此基础上减去指定的时间段
6.CASE a WHEN b THEN c [WHEN d THEN e]* [ELSE f] END --当a=b时,返回c;当a=d时,返回e,否则返回f
CASE WHEN a THEN b [WHEN c THEN d]* [ELSE e] END --当值为a时返回b,当值为c时返回d。否则返回e
7.concat(string A, string B…) --连接多个字符串,合并为一个字符串,可以接受任意数量的输入字符串
--任何字符与null连接都是NULL
concat_ws(string SEP, string A, string B…) --带分隔符字符串连接函数
例如:select concat_ws('_','abc','def','gh') from lxw_dual;返回 abc_def_gh
行转列,e.g. select concat_ws('_',collect_set(visitor_name))
8.upper(string A) 或者 ucase(string A) --将文本字符串转换成字母全部大写形式
9.lower(string A) 或者 lcase(string A) --将文本字符串转换成字母全部小写形式
10.trim(string A) --删除字符串两端的空格,字符之间的空格保留
ltrim --左边去空格
rtrim --右边去空格
11.like --例如:a like b --如果字符串A或者字符串B为NULL,则返回NULL;如果字符串A符合表达式B 的正则语法,则为TRUE;否则为FALSE。
--B中字符”_”表示任意单个字符,而字符”%”表示任意数量的字符。
例如:select aaaaaa like '%aaa%'
12.split(string str, string pat) --将字符串转换为数组,以pat为分隔
13.substr(string A, int start) 或者 substring(string A, int start) --字符串截取函数,
例:select substr(‘abcde’,3); --返回cde
例:select substring('ancdefghijklmn',4,8); --返回 defghijk
该子字符串从指定的 beginIndex 处开始, endIndex:到指定的 endIndex-1处结束。
14.regexp_extract --正则表达式解析函数 通过下标返回正则表达式指定的部分
regexp_extract(str, regexp[, idx])
其中:
str是被解析的字符串
regexp 是正则表达式
idx是返回结果 取表达式的哪一部分 默认值为1。
0表示把整个正则表达式对应的结果全部返回,1表示返回正则表达式中第一个() 对应的结果 以此类推
例 from
(select distinct id, name, val from text_table
where p_provincecode=12345 and regexp_extract(lower(id),'(@id)$|(@num)(\\d*)$',0) <>''
)a
$ 匹配行结束符;
* 匹配0或多个正好在它之前的那个字符;重复零次或多次
\ 这是引用符,用来将这里列出的这些元字符当作普通的字符来进行匹配;
| 将两个匹配条件进行逻辑“或”(Or)运算;
\d 匹配数字。在hive这种写正则表达式需要用\转义,所以\\d
^ 匹配一行的开始
? 匹配0或1个正好在它之前的那个字符;重复零次或一次
. 匹配除换行符号外的任意字符
15.regexp_replace(string A, string B, string C) --正则表达式替换函数 字符串A中的B字符被C字符替代
regexp_replace(trim(waitbegin), '/', '-')
unix_timestamp(concat_ws(':', regexp_replace(trim(ackbegin), '/', '-'), '00'))-unix_timestamp(concat_ws(':', regexp_replace(trim(waitbegin), '/', '-'), '00')) as wait_duration,
16.get_json_object(string json_string, string path) --json解析函数 解析json的字符串json_string,返回path指定的内容。如果输入的json字符串无效,那么返回NULL。
17.内置聚合函数 count、sum、avg、min、max
18.left semi join ... on ...--只打印左边的表中的列,规律是如果主键在右边表中存在,则打印,否则过滤掉
--相当于sql的in
--不会产生重复的多条记录
19.collect_set --与group by组合能列转行,相当于group_concat
20.SELECT COALESCE(NULL, NULL, GETDATE()) --由于两个参数都为null,所以返回getdate()函数的值,也就是当前时间。即返回第一个非空的值。由于这个函数是返回第一个非空的值,所以参数里面必须最少有一个非空的值,如不是,将会报错
sql:注意问题
1.hive中只有union 没有union all
union --联合两张表(会自动去重,两张表取出的字段个数和类型必须一致) 并集操作
union all --联合两张表的所有数据(不会去重,两张表取出的字段个数和类型必须一致) 并集操作
2.ABS() --求绝对值
3.与over函数结合的几个函数介绍
参考网址:http://blog.csdn.net/winer2008/article/details/4283539
row_number()over()、rank()over()和dense_rank()over()函数的使用
row_number() 是没有重复值的排序(即使两天记录相等也是不重复的),可以利用它来实现分页
dense_rank() 是连续排序,两个第二名仍然跟着第三名
rank() 是跳跃排序,两个第二名下来就是第四名
row_number() OVER (PARTITION BY COL1 ORDER BY COL2)
--表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)
例:row_number() over (partition BY stbid,userid ORDER BY timestamp) AS group_idx,
--over(order by salary range between 5 preceding and 5 following):窗口范围为当前行数据幅度减5加5后的范围内的。
sum(s)over(order by s range between 2 preceding and 2 following) 表示加2或2的范围内的求和
--over(order by salary rows between 5 preceding and 5 following):窗口范围为当前行前后各移动5行。
sum(s)over(order by s rows between 2 preceding and 2 following)表示在上下两行之间的范围内
4.group by 和 having
SELECT A COUNT(B) FROM TABLE GROUP BY A HAVING COUNT(B)>2
5.SemanticException Column xx Found in more than One Tables/Subqueries报错
Hive中有两张表中拥有同一个字段名称,在这两个表做关联的时候会报这个错误,
如
select a.c, b.c, c.name
from A b
left join (select count() as c,code from B group by code )b on a.code=b.code
left join C c on a.code = c.code;
a.c 和c.name的c,hive下含义辨识不清楚,改为如下
select a.c, b.c, cc.name
from A b
left join (select count() as c,code from B group by code )b on a.code=b.code
left join C cc on a.code = cc.code;
5.子查询只能在from后或者where后
6.hive基本数据类型记录
hive sql常用整理-hive引擎设置的更多相关文章
- Hive SQL 常用日期
Hive SQL 常用日期 原文地址:Hive SQL常用日期函数 Hive SQL 常用日期 注意: MM DD MO TU等要大写 已知日期 要求日期 语句 结果 本周任意一天 本周一 selec ...
- Hive SQL 监控系统 - Hive Falcon
1.概述 在开发工作当中,提交 Hadoop 任务,任务的运行详情,这是我们所关心的,当业务并不复杂的时候,我们可以使用 Hadoop 提供的命令工具去管理 YARN 中的任务.在编写 Hive SQ ...
- 一起学Hive——总结常用的Hive优化技巧
今天总结本人在使用Hive过程中的一些优化技巧,希望给大家带来帮助.Hive优化最体现程序员的技术能力,面试官在面试时最喜欢问的就是Hive的优化技巧. 技巧1.控制reducer数量 下面的内容是我 ...
- 【转】数据分析sql常用整理
[SQL 数据分析常用语句] • 1 基础查询 • 2 字符串数字日期时间 • 3 聚合数据查询 • 4 子查询 • 5 联接组合查询 • 6 高级查询 • 7 更新数据 阅读提醒:点击图片放大可看清 ...
- 数据分析sql常用整理
[SQL 数据分析常用语句] 2017-07-20 00:00 数据分析 来源:datakong 转自:大数据 • 1 基础查询 • 2 字符串数字日期时间 • 3 聚合数据查询 • 4 子查询 • ...
- SQL常用语句|创建表,设置主键......
新建表 create table [表名]([自动编号字段] int IDENTITY (1,1) PRIMARY KEY ,[字段1] nVarChar(50) default \'默认值\' nu ...
- SQL Standard Based Hive Authorization(基于SQL标准的Hive授权)
说明:该文档翻译/整理于Hive官方文档https://cwiki.apache.org/confluence/display/Hive/SQL+Standard+Based+Hive+Authori ...
- Hive优化(整理版)
1. 概述 1.1 hive的特征: 可以通过SQL轻松访问数据的工具,从而实现数据仓库任务,如提取/转换/加载(ETL),报告和数据分析: 它可以使已经存储的数据结构化: 可以直接访问存储在Apac ...
- 最强最全面的Hive SQL开发指南,超四万字全面解析
本文整体分为两部分,第一部分是简写,如果能看懂会用,就直接从此部分查,方便快捷,如果不是很理解此SQL的用法,则查看第二部分,是详细说明,当然第二部分语句也会更全一些! 第一部分: hive模糊搜索表 ...
随机推荐
- 8.3版本提示未在本地计算机上注册 Microsoft.ACE.OLEDB.12.0 提供程序
这个原因是8.3版本推出了64位程序,但是Access驱动在64位系统上默认是没有安装的,需要下载一个组件安装即可. 下载2010 Access 驱动程序:数据连接组件安装 http://www.ba ...
- Spring Boot中的initializers的作用分析
在SpringApplication的实例属性中有一个初始器的属性:List<ApplicationContextInitializer<?>> initializers ,这 ...
- leetcode 307 Range Sum Query
问题描述:给定一序列,求任意区间(i, j)的元素和:修改任意一元素,实现快速更新 树状数组 树状数组的主要特点是生成一棵树,树的高度为logN.每一层的高度为k,分布在这一层的序列元素索引的二进制表 ...
- [转]JS根据useAgent来判断edge, ie, firefox, chrome, opera, safari 等浏览器的类型及版本
js根据浏览器的useAgent来判断浏览器的类型 userAgent 属性是一个只读的字符串,声明了浏览器用于 HTTP 请求的用户代理头的值. JavaScript语法:navigator.use ...
- EF 常见异常总结
问题:System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invoca ...
- 竞赛常用STL备忘录
__builtin: __builtin_popcount:二进制中 1 的个数__builtin_ctz:末尾的 0,即对 lowbit 取log__builtin_clz:开头的 0,用 31 减 ...
- OpenStack实践系列⑥构建虚拟机实例
OpenStack实践系列⑥构建虚拟机实例 四.创建一台虚拟机图解网络,并创建一个真实的桥接网络 创建一个单一扁平网络(名字:flat),网络类型为flat,网络适共享的(share),网络提供者:p ...
- OpenStack实践系列③镜像服务Glance
OpenStack实践系列③镜像服务Glance 3.5 Glance部署 修改glance-api和glance-registry的配置文件,同步数据库 [root@node1 ~]# vim /e ...
- PHP header 允许跨域请求
2018-1-29 17:36:14 星期一 header('Access-Control-Allow-Origin:*'); header('Access-Control-Allow-Methods ...
- Callcenter 模块解析
CallCenter模块详细介绍 一. Callcenter模块说明: 提供了呼叫中心的ACD功能,把客户端通过不同的”方案”和”等级”分配给来电,一个以”评分”为基础的系统是用来分配这些呼入.来电者 ...