當前位置:編程學習大全網 - 源碼下載 - Hive門戶源代碼

Hive門戶源代碼

首先,以下幾種情況會有以上結果。

Hive表分區,數據就在hive分區目錄中,然後執行下面的語句。

這裏有四種映射hdfs文件和hive表的方法。

執行select count()並選擇*

文件權限rwx

Select count()結果不為0。

Select *正常顯示數據。

執行select count()並選擇*

文件權限rw

Select count()的結果為0。

Select *正常顯示數據。

執行select count()並選擇*

文件權限rwx

Select count()結果不為0。

Select *正常顯示數據。

執行select count()並選擇*

文件權限rw

Select count()結果不為0。

Select *正常顯示數據。

基於以上四種情況,在創建分區表時,有些人會直接把數據放在對應的分區文件夾下,然後alter add partition,這是壹種加載數據的方式,會執行select count(*),返回0。他們不會執行mr task,而是直接讀取表級統計中的數據,而不會執行mr。

以下是hive.compute.query.using.stats的解釋

為新創建的表和表分區(如使用INSERT OVERWRITE語句創建的表)啟用表級統計信息的自動收集。該參數不生成列級統計信息,如CBO生成的那些信息。如果禁用,管理員必須使用ANALYZE table語句為新生成的表和表分區手動生成表級統計信息。

但默認值為真時,加載load的還是執行Mr,這部分要看源代碼。我還沒有找到這個源代碼,但是我比較了兩邊的統計信息,用下面的語句來看表的統計信息。

發現用alter加載數據和用load加載數據是有區別的。

以下是《帶負荷》的截圖。

下面是使用alter加載的截圖。

得到以上結論,我們正在深入探索,如果我們將新數據加載到dept1,dept1中的統計信息是否會更新。

我再次把數據放到dept1的另壹個分區後,查詢count(*),才發現又回到mr進行計算。

然後desc擴展dept1,發現沒有column _ stats _ accurate的數據。

原來建立之初默認使用的是壹張表。

首先有數據但是count(*)返回0,這是hive造成的。compute.query.using.stats = true,但不是hive。compute.query.using.stats = true。所有表都將計數(*)=0。第壹,要分表是否是分區表。會自動有column _ stats _ accurate的數據(不管這裏hive.compute.query.using.stats是否為真),然後column _ stats _ accurate的數據在加載到特定分區時會消失,但是column _ stats _ accurate的數據在用alter加載到分區時不會消失。

當表不是普通的非分區表時,沒有column _ stats _ accurate的數據。這時候不管是用load還是alter加載數據,count(* (*)都會帶走mr,這就是為什麽dept4也用alter,但是在執行count(*)的時候帶走Mr。但是,當執行分析表命令時,也會生成統計信息,並且在執行count(* (*)時不會獲取mr。

hive.compute.query.using.stats之前版本的默認值為fasle,現在為TRUE。我不知道是哪個版本的。如果設置為true,則在執行某些查詢(如select count(1))時,Hive將僅使用保存在元數據存儲中的狀態信息來返回結果。為了收集基本的狀態信息,您需要將hive.stats.autogather屬性配置為true。為了收集更多的狀態信息,您需要運行分析表查詢命令,例如下面的語句來收集sales_order_fact表的統計信息。

  • 上一篇:去美國尋寶撿漏小說有哪些
  • 下一篇:面試官再問妳優先級隊列,請把這篇文章丟給他
  • copyright 2024編程學習大全網