虛擬列
-- 當 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這三個值來定位出錯的原始文件和具體所在位置,很方便。