
select aid,ainfo,bnum from a join b on aid=bid and where bnum>=10
两个表做关联,首先where会过滤掉不需要的数据。
至于表怎么做map和reduce *** 作,在hive里的表是虚拟的,其实还是对hdfs文件进行 *** 作,你可以在hdfs:///user/hive/warehouse路径下找到以表名来命名的文件,里面就是表的内容,可以执行-cat命令查看。所以,它的map *** 作很简单,就是按行读文件,然后会根据hive的默认分隔符\001对每行进行切分。切分完成后就会按照你SQL指定的逻辑进行合并,最后再输出成hdfs文件,只不过在hive里面看它是以表的形式展现的。
job数会在你执行sql语句之后紧接着有相应的日志记录,
Total MapReduce jobs = 2
Launching Job 1 out of 2
Number of reduce tasks not specified Estimated from input data size: 2
In order to change the average load for a reducer (in bytes):
set hiveexecreducersbytesperreducer=<number>
In order to limit the maximum number of reducers:
set hiveexecreducersmax=<number>
In order to set a constant number of reducers:
这样就是有两个job,正在执行第一个job。
Hadoop job information for Stage-1: number of mappers: 5; number of reducers: 2
而这个就会告诉你有多少个mapper和reducer。
像你写的这个sql有join *** 作,而且是hiveSQL里面最普通的join,那么一定会有reducer参与,如果数据量很大,比如上千万条记录,join就会特别慢,job进度就会一直卡在reduce *** 作。可以改成mapjoin或者sort merge bucket mapjoin。
其实hive效率不高,不适合实时查询,即使一个表为空,用hive进行查询也会很耗时,因为它要把sql语句翻译成MR任务。虽然简化了分布式编程,但是效率上就会付出代价。
你的这句sql应该会翻译成一个JOB来执行,就是简单地map和reduce。
mapreduce就是按行读文件,然后切分,合并,输出成文件。
目前我知道的方法是把你希望添加的数据写入到文本中,然后从文本导入到你的表格中。
但是,hive不知道oracle的insert into , update。
load data [local] inpath 'yourfile_location' [overwrite] into your_table;
以上就是关于hive sql里,帮我描述一个简单的sql的原理全部的内容,包括:hive sql里,帮我描述一个简单的sql的原理、hql语句怎么写向Hive中一次插入一条数据或一个字段的值,类似关系型数据库的sql语句、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)