首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【挑战30万年薪】Hive语句详解之从SQL到HQL的应转习惯

Hive不支持等值连接 

SQL中对两表内联可以写成:

select * from dual a,dual b where a.key=b.key;

Hive中应为:

select * from dual a join dual b on a.key=b.key;

而不是传统的格式:

SELECT t1.al as c1,t2.b1 as c2FROM t1,t2 WHERE t1.a2=t2.b2

分号字符:

分号是SQL语句结束标记,在HiveQL中也是,但是在HiveQL中,对分号的识别没有那么智慧,例如:

select concat(key,concat(";",key))from dual;

但HiveQL在解析语句时提示:

FAILED:Parse Error:line O:-1 mismatched input ''expecting )in function specification

解决的办法:

使用分号的八进制的ASCII码进行转义,那么上述语句应写成:select concat(key,concat("\073',key))from dual;

IS [INOT] NULL

SQL中null代表空值,值得警惕的是,在HiveQL中String类型的字段若是空(empty)字符串,即长度为0,那么对它进行IS NULL的判断结果是False.

Hive不支持将数据插入现有的表或分区中,仅支持覆盖重写整个表,示例如下:

INSERT OVERWRITE TABLE   t1   SELECT *  FROM  t2;

hive不支持INSERTINTO,UPDATE,DELETE操作

这样的话,就不要很复杂的锁机制来读写数据。

INSERT INTO syntax is only available starting in version 0.8。

解释:

INSERT INTO就是在表或分区中追加数据。

hive支持嵌入mapreduce程序,来处理复杂的逻辑如:

FROM(

MAP doctext USING ‘python wc_mapper.py'AS(word,cnt)

FROM docs

CLUSTER BY word

)a

REDUCE word,cnt USING 'python wc_reduce.py';

解释:

doctext:是输入

word,cnt:是map程序的输出

CLUSTER BY:将wordhash后,又作为reduce程序的输入

map程序reduce程序可以单独使用,如:

FROM(

FROM session_table

SELECT sessionid,tstamp,data

DISTRIBUTE BY sessionid SORT BY tstamp

)a

REDUCE sessionid,tstamp,data USING 'session_reducer.sh';

解释:

DISTRIBUTE BV:用于给reduce程序分配行数据

hive支持将转换后的数据直接写入不同的表,还能写入分区、hdfs和本地目录。

这样能免除多次扫描输入表的消费。

如果觉得对你有所帮助。记得收藏和关注呦!(每日更新各种大数据框架)

如需转载请注明出处(创作不易请见谅)

和巨婴程序猿一起成长。让自己变得更优秀

想了解更多精彩内容,快来关注跟着巨婴去逆袭

我最近一直在思考(大数据通俗讲解)的问题,你的看法是什么呢?关注我快说出来一起交流一下吧~

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200704A0GLW100?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券