hivesql常⽤整理-hive引擎设置
遇到个情况,跑hive级联insert数据报错,可以尝试换个hive计算引擎
1、配置mapreduce计算引擎
ine=mr;
2、配置spark计算引擎
ine=spark;
3、配置tez 计算引擎
ine=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'; //⼀次添加⼀个分区
tabletable
例:
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
--任何字符与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))
Hive中有两张表中拥有同⼀个字段名称,在这两个表做关联的时候会报这个错误,
select a.c,  b.c,  c.name
from A b
left join (select count(1) as c,code from B group by code )b  de
left join C c de = c.code;
a.c 和c.name的c,hive下含义辨识不清楚,改为如下
select a.c,  b.c,  cc.name
from A b
left join (select count(1) as c,code from B group by code )b  de
left join C cc de = cc.code;
5.⼦查询只能在from后或者where后
6.hive基本数据类型记录

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。