今天在看hive的時候,注意到我們在查數據的時候,我們可能並不知道這個字段是來自哪個文件。
因為文件都是存在HDFS上面的,hive的表只是對HDFS上文件中的數據做一個映射,真的數據是存在在HDFS上面的。
所以hive在設置的時候,設置了三個虛擬列,他會告訴你你這個值是來自於哪一張表當中,告訴你字段的偏移 量這些信息。
1. INPUT__FILE__NAME map任務讀入File的全路徑
2. BLOCK__OFFSET__INSIDE__FILE 如果是RCFile或者是SequenceFile塊壓縮格式文件則顯示Block file Offset,也就是當前快在文件的第一個字偏移量,如果是TextFile,顯示當前行的第一個字節在文件中的偏移量
3. ROW__OFFSET__INSIDE__BLOCK RCFile和SequenceFile顯示row number, textfile顯示為0
注:若要顯示ROW__OFFSET__INSIDE__BLOCK ,必須設置set hive.exec.rowoffset=true;
這里我使用了一個student表,在這個表當中我分別使用了同一文件,然后命名為不同的文件名稱。然后將數據插入到表當中(我在本地測試的沒在HDFS上面測試)
查詢的結果如下:

我這里采用的是textfile所以最后那個數值為0.從這里我們可以看到我們的結果集中的字段是來自於那個文件當中。
當然我們在進行查詢的時候可能這么干,當我們的數據當中出現了臟數據的我們可以使用這種方式去定位具體的臟數據在哪里。是很不錯的排查方式。
這種方式看起來不怎么好看,我們可以使用beeline的形式啟動hive,那樣更清楚。啟動的命令行如下:
beeline -u jdbc:hive2://localhost:10000
結果如下,他的線框視覺效果很好;

當然這種方式只不只是看着好看,關於beeline是基於線程啟動的,我們在操作hive的時候,每啟動一個我們都是啟動了一個進程,當我們使用beeline啟動的時候
這個時候我們啟動的是一個線程,這個時候我們只啟動了一個進程,對於系統的性能方面有很大的提升。具體的可以自己參考網上的信息學習。
