火山日常啰嗦
讲讲hive的小知识点--虚拟列
hive虚拟列有两种:
1)INPUT__FILE__NAME
输入文件名,标记着mr任务的map task的输入数据中每条记录的来源(即这些输入数据存储路径,它是属于哪个目录下的哪个文件的)。
2)BLOCK__OFFSET__INSIDE__FILE
记录在文件中的偏移量,一个表中有多条记录,而这个BLOCK__OFFSET__INSIDE__FILE就是计算表中每条记录相对于表中第一条记录的第一个字符的字节偏移量(因为一个字符的大小就是一个字节,所以也可以说是字符个数偏移量)。但对于分区表而言,是每个分区中的每条记录相对于该分区中的第一条记录的第一个字符的字节偏移量,而不是相对于整张表的第一条记录的第一个字符的了。
Ps: INPUT__FILE__NAME以及BLOCK__OFFSET__INSIDE__FILE中的下划线是双下划线的而不是单下划线,之前我每次都是打了单下划线,所以每次都报错。
hive虚拟列有什么用处?
虚拟列的应用场景:
查找表中某条或某些记录所在的文件位置以及该记录在表中的偏移量
案例演示:
表中每条记录来于哪里以及每条记录在文件中的偏移量都记录得清清楚楚。