去O迁移经验分享

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将出现笛卡尔积

转载于:https://my.oschina.net/rossiter/blog/746303

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值