去O迁移经验分享

2017-01-05 11:08:59来源:oschina作者:rossiter人点击

Hive与Oracle表关联语句对比 http://www.linuxidc.com/Linux/2014-04/100999.htm http://www.tuicool.com/articles/63m6f2


列转行:拆分的逻辑,可以用explode配合split,later view实现 select id , split_value from( select 1 id, split('1,2,3', ',') values ) tab lateral view explode(values) splittab as split_value


行转列:concat_ws实现 select id, concat_ws('|', collect_set(val)) from tab group by id


--增加字段描述和表描述的方法 CREATE TABLE TABLE_NAME ( COLUMN_NAME COLUMN_TYPE COMMENT '字段描述' ) COMMENT '表描述' STORED AS PARQUET;


1.union all 如果的字段名不相同,则报错,如: select 1 id1 union all select 2 id2; 正确的写法:select 1 id union all select 2 id; 2.hive不支持union 解决方法示例: select a.id from ( select 1 id union all select 1 id ) a group by a.id;


order by 支持使用别名,但不支持order by 1(运行不报错,但结果不准确)


当前时间 unix_timestamp() 当前时间 from_unixtime(1450776716) 当前日期 from_unixtime(1450776716,'YYYY-MM-dd') 当前年 year('2015-12-22') 当前月 month('2015-12-22') 当前日 day('2015-12-22') 当前季度 floor((month('2015-12-22')-1)/3)+1 当前季度 Quarter('2015-12-22') 当前第几周 weekofyear('2015-12-22') 当前星期几 pmod(datediff('2015-12-22','1900-01-07'),7) 当月第一天 concat(substr('2015-12-22',1,7),'-01') 当月最后一天 last_day('2015-12-22') 上月同期 add_months('2015-12-22',-1) 上年同期 add_months('2015-12-22',-12)


timestamp类型日期加减1天 cast(from_unixtime(unix_timestamp(t.created_at) +/- 24*3600) as timestamp)


--在HIVE中NULL与NULL是相等的,如下SQL测试: select case when a=b then 1 else 0 end c from ( select NULL a,NUll b from ing.dual ) table_A;


所以在JOIN的时候,要么排除空值,要么使用NVL转换空值,否则大量空值JOIN将出现笛卡尔积

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台