hive入门4——限制条件能用or吗?

hive入门系列:开始,继续,进行

昨天想到了在where限制条件中能否用or,一般都是用and。。。。。。

本菜鸟尝试下就知道了,如下:

单个分区510和528的,以及or的结果

单个的可以执行,当用or的时候出错了,,,,,,分区用and也不行啊,没出错,但是你想想,一个参数即等于510,又等于528,这怎么有结果啊。。。

java.lang.OutOfMemoryError: GC overhead limit exceeded
	at org.apache.hadoop.hdfs.protocolPB.PBHelper.convert(PBHelper.java:648)
	at org.apache.hadoop.hdfs.protocolPB.PBHelper.convert(PBHelper.java:823)
	at org.apache.hadoop.hdfs.protocolPB.PBHelper.convertLocatedBlock(PBHelper.java:1284)
	at org.apache.hadoop.hdfs.protocolPB.PBHelper.convert(PBHelper.java:1302)
	at org.apache.hadoop.hdfs.protocolPB.PBHelper.convert(PBHelper.java:1445)
	at org.apache.hadoop.hdfs.protocolPB.PBHelper.convert(PBHelper.java:1556)
	at org.apache.hadoop.hdfs.protocolPB.PBHelper.convert(PBHelper.java:1565)
	at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.getListing(ClientNamenodeProtocolTranslatorPB.java:576)
	at sun.reflect.GeneratedMethodAccessor15.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:256)
	at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:104)
	at com.sun.proxy.$Proxy12.getListing(Unknown Source)
	at org.apache.hadoop.hdfs.DFSClient.listPaths(DFSClient.java:2101)
	at org.apache.hadoop.hdfs.DistributedFileSystem$DirListingIterator.(DistributedFileSystem.java:887)
	at org.apache.hadoop.hdfs.DistributedFileSystem$DirListingIterator.(DistributedFileSystem.java:870)
	at org.apache.hadoop.hdfs.DistributedFileSystem$17.doCall(DistributedFileSystem.java:815)
	at org.apache.hadoop.hdfs.DistributedFileSystem$17.doCall(DistributedFileSystem.java:811)
	at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81)
	at org.apache.hadoop.hdfs.DistributedFileSystem.listLocatedStatus(DistributedFileSystem.java:811)
	at org.apache.hadoop.fs.FileSystem.listLocatedStatus(FileSystem.java:1753)
	at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.singleThreadedListStatus(FileInputFormat.java:302)
	at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.listStatus(FileInputFormat.java:265)
	at org.apache.hadoop.hive.shims.Hadoop23Shims$1.listStatus(Hadoop23Shims.java:137)
	at org.apache.hadoop.mapreduce.lib.input.CombineFileInputFormat.getSplits(CombineFileInputFormat.java:216)
	at org.apache.hadoop.mapred.lib.CombineFileInputFormat.getSplits(CombineFileInputFormat.java:75)
	at org.apache.hadoop.hive.shims.HadoopShimsSecure$CombineFileInputFormatShim.getSplits(HadoopShimsSecure.java:310)
	at org.apache.hadoop.hive.ql.io.CombineHiveInputFormat.getCombineSplits(CombineHiveInputFormat.java:433)
	at org.apache.hadoop.hive.ql.io.CombineHiveInputFormat.getSplits(CombineHiveInputFormat.java:534)
	at org.apache.hadoop.mapreduce.JobSubmitter.writeOldSplits(JobSubmitter.java:332)
	at org.apache.hadoop.mapreduce.JobSubmitter.writeSplits(JobSubmitter.java:324)
FAILED: Execution Error, return code -101 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask. GC overhead limit exceeded

群里大佬说加个括号用or,我试试看,结果是不是一样。

where (day=510 or day=528)

我只看了最后拉取的行数,刚好是单个的相加,不过真的好慢啊

Time taken: 1949.662 seconds, Fetched: 3665505 row(s)

这个问题源于student id的个人情况每天都有可能更新,可能更新也可能不更新,所以你不知道哪天哪个时间的是最新的,如果不设置时间段,可能将历史所有的更新存下来,几个T都是有可能的,后来换了个实时更新的表解决了问题。感谢同事。

可以搜索到与曝光日志同样rows数的,既然如此,干脆我直接将点击日志和用户画像放在一起得了,简单省事。

这样也可将不同时间段内的点击曝光搜索到相应的用户画像,等于是从点击曝光搜索用户画像。

 

拜拜

For Video Recommendation in Deep learning QQ Group 277356808

For Speech, Image, Video in deep learning QQ Group 868373192

I'm here waiting for you
 

 

你可能感兴趣的:(Recommendation)