Hive-将列扫描工作在csv外部表

qacovj5a  于 2021-06-24  发布在  Hive
关注(0)|答案(2)|浏览(296)

通常,如果我们用parquet或orc创建一个配置单元表,那么它将扫描我们在select查询中提到的特定列。
但是假设,我有10个csv文件,并在上面创建了一个外部表。现在如果我这么做了 select col1, col2, col3 from external_table; 然后它会扫描我所有的行,并且只选择所选的列,或者它将如何工作?

zysjyyx4

zysjyyx41#

简而言之:mapper逐行读取文件拆分,并将行转换为只包含必要列的中间行,进行初始筛选、聚合和其他转换。
reducer从mapper接收中间行并进行最终处理:聚合、排序等。
长话短说:
mr上的hive和tez上的hive使用mapreduce框架原语构建整个处理作业。
正在拆分csv文件,mapreduce framework为inputformat生成的每个inputsplit生成一个Map任务。
Map将输入记录转换为中间记录。转换的中间记录不需要与输入记录的类型相同。发出的记录中只包含必要的列。给定的输入对可以Map到零个或多个输出对,Map器进行初始过滤和聚合。
Map器输出被排序,然后按还原器进行分区,分区的总数与还原器的数量相同。
中间的排序输出总是存储在一个简单的 (key-len, key, value-len, value) 格式。应用程序可以控制是否以及如何压缩中间输出。
reducer将共享一个键的一组中间值缩减为一组较小的值。换句话说,reducer进行最终聚合,必要时进行排序。
reducer有3个主要阶段:shuffle、sort和reduce。洗牌
reducer的输入是Map器的排序输出。在这个阶段,框架通过http获取所有Map器输出的相关分区。分类
在这个阶段,框架按键对输入进行分组(因为不同的Map器可能输出相同的键)。
洗牌和排序阶段同时发生;在获取Map输出时,它们被合并。
在减少阶段 reduce(WritableComparable, Iterator, OutputCollector, Reporter) 方法被调用 <key, (list of values)> 在分组输入中配对。
reduce任务的输出通常写入文件系统。
如果不需要减少,将reduce任务数设置为零是合法的。在这种情况下,map任务的输出直接进入文件系统。
hive on tez将复杂的作业(由许多map和reduce步骤组成)构建为单个dag(顶点是处理步骤-Map器或reducer,边-它们之间的数据传输),可以跳过不必要的步骤,并且不会将中间结果写入持久存储(hdfs)。
请阅读mapreduce文档中的更多详细信息。

to94eoyn

to94eoyn2#

是的,对于csv或以面向行的方式存储数据的情况,方法读取所有行(即所有列),如果有任何groupby或聚合,那么reducer将执行聚合。

相关问题