hive sql里,帮我描述一个简单的sql的原理

hive sql里,帮我描述一个简单的sql的原理,第1张

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语句、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9756111.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存