存档

文章标签 ‘hive’

hive load data报错

2014年6月27日 没有评论

使用hive,需要load data进去,表结构:

CREATE TABLE tb1(
id int,
ip string,
time int,
type int
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ‘,’
LINES TERMINATED BY ‘\n’
;

后来使用load data load数据进这个表

LOAD DATA LOCAL INPATH ‘/data/tmp/tab1_201406.log’ INTO TABLE `table1` FIELDS TERMINATED BY ‘,’ LINES TERMINATED BY ‘\n’;

结果报错:

FAILED: ParseException line 1:78 mismatched input ‘FIELDS’ expecting EOF near ‘login’

后来发现:

LOAD DATA LOCAL INPATH ‘/data/tmp/tab1_201406.log’ INTO TABLE `table1`;

这样是可以的

即hive load data的时候不要带 FIELDS TERMINATED BY ‘,’ LINES TERMINATED BY ‘\n’,这个在创建表的时候已经有了

另外这里的表名,要么用 ` (tab键上面的那个符号),要么不要用引号

分类: 技术 标签:

hive中的top n的解决过程及思路

2014年6月10日 没有评论

基本思路.
有数据 : 字段 user, category, value
需求 : 取每个user的value的最大5个category

1.先按照user,value组合来排序(这里是最大值,倒序)
2.再rank相当于给每个user下的每条记录一个编号rank(user)
3.最后rank编号是N范围的就是要取的TOP N的值

SELECT *
FROM
(
SELECT *, rank(user) as row_number
FROM (
SELECT user, category, value
FROM $compTable
WHERE user is NOT NULL AND AND ctr > 0
DISTRIBUTE BY user
SORT BY user, value desc
) A
) B
WHERE row_number < 5
ORDER BY user, row_number
;

rank udf的源码

package com.example.hive.udf;
import org.apache.hadoop.hive.ql.exec.UDF;

public final class Rank extends UDF{
private int counter;
private String last_key;
public int evaluate(final String key){
if ( !key.equalsIgnoreCase(this.last_key) ) {
this.counter = 0;
this.last_key = key;
}
return this.counter++;
}
}

javac -classpath $HIVE_HOME/lib/hive-serde-1.7.jar:$HIVE_HOME/lib/hive-exec-0.10.0.jar:$HADOOP_HOME/hadoop-core-0.20.2-cdh3u5.jar -d /data/tmp/ /data/tmp/Rank.java

jar -cf /data/tmp/Rank.jar /data/tmp/Rank.classs

参考:

http://ragrawal.wordpress.com/2011/11/18/extract-top-n-records-in-each-group-in-hadoophive/
http://www.shangxueba.com/jingyan/753433.html

Technorati : ,
Del.icio.us : ,
Zooomr : ,
Flickr : ,

分类: 杂七杂八 标签: ,

hive几个简单的用法

2014年5月31日 没有评论

1.hive中的将select的结果转储到一个不存在并且要创建的表中

create table new_result_table as

select * from xxxxxx;

2.将已有查询结果插入到现有表中

INSERT INTO TABLE mytable SELECT xxx from xxx

Technorati :
Del.icio.us :
Zooomr :
Flickr :

分类: 杂七杂八 标签:

hive 中内嵌变量

2014年5月31日 没有评论

hive中内嵌变量

set current_db=test_db;

use ${hiveconf:current_db};

这样就可以了,意思就是hive中的库名表名也可以用变量来替换了,这个比mysql中的灵活多了

参考:

http://dacoolbaby.iteye.com/blog/1908389

分类: 杂七杂八 标签: ,

Hive的case when和mysql的case when的区别

2014年3月20日 没有评论

最近在用hive,因为需要用到case when语法,就网上查了下资资料

hive用法:

select

case col_name

when value then other other_value

else col_name

end as other_col_name

mysql的用法:

select

case

when col_name=xxx then value

else col_name

end as col_name_xxx

from table_name;

参考:

http://yaoyinjie.blog.51cto.com/3189782/920688

https://dev.mysql.com/doc/refman/5.0/en/case.html

分类: 杂七杂八 标签: ,

phpHiveAdmin故障一例

2014年3月6日 没有评论

从网上看到了phpHiveAdmin,和phpmyadmin类似,可以查下hive

感觉不错,部署了,报错了,看文档了,尝试了,未果了,蛋疼的扔了好久没有解决

后来网上查到报错和这个贴里面的6楼报错一样

http://slaytanic.blog.51cto.com/2057708/773434

后来不经意中看了下

web根目录下的results文件夹里面的xxx.run文件

里面显示:

inode /tmp 权限错误

这时想起来了,hdfs的文件系统权限是mysql,php的运行权限是dhom,不一样哟

马上运行:

/data/app/hadoop/bin/hadoop fs -chmod -R 777 /tmp/

在查询,OK了。。。

Ok了。爽了、、、、

phphiveadmin项目地址:

https://github.com/xianglei/phpHiveAdmin

分类: 杂七杂八 标签:

hive函数参考

2014年3月6日 没有评论

hive函数参考

http://blog.csdn.net/l0979365428/article/details/7659754

 

分类: 技术 标签:

hive中group by 提示Expression Not In Group By Key的解决办法

2014年3月5日 没有评论

hive中group by的时候

select col_1,col_2 from table_name group by col_1;

会提示:

FAILED: SemanticException [Error 10025]: Line 1:12 Expression not in GROUP BY key ‘col_2’

这里网上查了下,有两种解决方法:

1、不关心col_2的值,且有多个col_2,那么语句改成

select col_1, collect_set( col_2 )[0] from table_name group by col_1;

2、如果每个col_2的值不同且关心col_2的值,那么可以改成

select col_1,col_2 from table_name group by col_1,col_2;

http://one-line-it.blogspot.com/2012/11/hive-expression-not-in-group-by-key.html

Technorati : , ,
Del.icio.us : , ,
Zooomr : , ,
Flickr : , ,

分类: linux, 技术 标签: , ,

hive分隔符替换

2014年3月5日 没有评论

最近在使用hive,计算某些数据结果,但是hive输出的结果的分隔符很奇怪

总表面上看,好像是tab键,\t,结果用sed替换\t,替换不成功

后来网上查了资料,这里hive的分隔符是\001,但是sed ‘s/\001/,/g’,这样还是不行

后来网上看了下说这个符号是ctrl+v 和ctrl+I的组合键的结果

后来尝试了下sed ‘s/ /,/g’,结果就OK了、。、、

perl里面也可以这样替换

在python中可以使用line.split(‘\x01’)来进行切分(未验证)

参考文档:

http://blog.csdn.net/zyy160alex5/article/details/9171643

http://scn.sap.com/thread/3369277

Del.icio.us : , ,
Zooomr : , ,
Flickr : , ,
Technorati : , ,

分类: 技术 标签: , ,