赞
踩
hive中在创建表时,一般会根据导入的数据格式来指定字段分隔符和列分隔符。
一般导入的文本数据字段分隔符多为逗号分隔符或者制表符(但是实际开发中一般不用着这种容易在文本内容中出现的的符号作为分隔符),当然也有一些别的分隔符,也可以自定义分隔符。有时候也会使用hive默认的分隔符来存储数据。
分隔符详解:https://blog.csdn.net/qq_26442553/article/details/80297028
hive中把不相等的情况拿出来时,无法直接写字段A<>字段B,否则会报错。
想从一个订单表中,剔除测试用户的订单,该如何实现呢?使用left join
select a.uid,a.orderid
from table1 a --订单表
left join table2 b --测试用户id表
on a.uid = b.uid
where b.uid is null
比如 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;
在传统数据库中字段没有值或者为空即表示为NULL,但是在hive中默认的NULL值是\N。
在hive中会把文本的\N解析为NULL。在使用IS NULL 或者IS NOT NULL时会过滤数据。
如果想延续传统数据库中对于空值为NULL,可以通过alter语句来修改hive表的信息,保证解析时是按照空值来解析NULL值。语句如下:
alter table ljn005
SETSERDEPROPERTIES('serialization.null.format' ='');
这样就可以修改默认的NULL值的定义了。比如这里定义
alter table ljn005
SETSERDEPROPERTIES('serialization.null.format' ='abc');
则以后出现’abc’,hive都会把这个解析为NULL值。
分号是SQL语句结束标记,在HiveQL中也是,但是在HiveQL中,对分号的识别没有那么智慧,例如:
select concat(key,concat(';',key)) from dual;
但HiveQL在解析语句时提示:
FAILED: Parse Error: line 0:-1 mismatched input '<EOF>' expecting ) in function specification
解决的办法是,使用分号的八进制的ASCII码进行转义,那么上述语句应写成:
select concat(key,concat('\073',key)) from dual;
关于这个很多人都写了不支持,但是在Hive的之前版本已经新增了这几个命令,现在是可以使用的
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。