虚拟列
-- 当 hive 产生了非预期的或 null 的时候,可以通过虚拟列进行诊断,判断哪行数据出现问题
INPUT__FILE__NAME (输入文件名)map任务读入File的全路径
BLOCK__OFFSET__INSIDE__FILE (块内偏移量) 如果是RCFile或者是SequenceFile块压缩格式文件则显示Block file Offset,也就是当前快在文件的第一个字偏移量,如果是TextFile,显示当前行的第一个字节在文件中的偏移量
ROW__OFFSET__INSIDE__BLOCK ( 行偏移量,需要设置 hive.exec.rowoffset=true; 启用 ) RCFile和SequenceFile显示row number, textfile显示为0
如:表 ods.kesheng_sdk_json_ex
hive> select INPUT__FILE__NAME,BLOCK__OFFSET__INSIDE__FILE from ods.kesheng_sdk_json_ex limit 5;
OK
hdfs://ns1/user/hadoop/ods/kesheng/20160811/00/kesheng.1470913703668.gz 0
hdfs://ns1/user/hadoop/ods/kesheng/20160811/00/kesheng.1470913703668.gz 894
hdfs://ns1/user/hadoop/ods/kesheng/20160811/00/kesheng.1470913703668.gz 1768
hdfs://ns1/user/hadoop/ods/kesheng/20160811/00/kesheng.1470913703668.gz 2627
hdfs://ns1/user/hadoop/ods/kesheng/20160811/00/kesheng.1470913703668.gz 5430
Time taken: 24.381 seconds, Fetched: 5 row(s)
由于我们公司的这个参数没有开启,所以ROW__OFFSET__INSIDE__BLOCK就没有啦
如果碰到有脏数据或者结果异常的时候,可以通过select这三个值来定位出错的原始文件和具体所在位置,很方便。