1. 程式人生 > >hive SQL 產生結果檔案的問題

hive SQL 產生結果檔案的問題

  1. 每次hive sql執行完會產生幾個結果檔案?
  2. 預設的hive結果檔名叫什麼?
  3. 這些結果檔案我們可以控制麼,例如改名?個數?

好的下面來解答一下:

  1. 一般來說,每次hivesql執行完畢之後只會生成一個結果檔案,名稱預設為000000_0,如果存在類似於insert into這種語句則每一次insert into 成功之後都會產生一個結果檔案,類似於000000_0_copy_1,多次insert into 產生的檔案依次類推。
  2. 預設檔名為000000_0,000000_0_copy_1以及類似的000000_X等
  3. 這些檔名是hadoop和hive預設產生的一般的話是不能更改的,修改的話需要從原始碼入手或者通過hadoop命令的形式直接去操作hdfs檔案,建議後者;結果檔案的個數這個就有點複雜了,涉及到具體的sql語句和reducer的個數以及其他配置。

下面來簡單分析下第三個問題:

與reducer個數有關:

多個reducer就會有多個結果檔案,預設hive會自己去設定reducer的個數,reduce個數的設定極大影響任務執行效率,不指定reduce個數的情況下,Hive會猜測確定一個reduce個數,可以在hive執行sql的時,打印出來,如下:

Number of reduce tasks not specified. Estimated from input data size: 1

In order to change the average load for a reducer (in bytes):

  set hive.exec.reducers.bytes.per.reducer=<number>

In order to limit the maximum number of reducers:

  set hive.exec.reducers.max=<number>

In order to set a constant number of reducers:

  set mapred.reduce.tasks=<number>


reduce數量由以下三個引數決定:

mapred.reduce.tasks(強制指定reduce的任務數量)

hive.exec.reducers.bytes.per.reducer(每個reduce任務處理的資料量,預設為1000^3=1G)

hive.exec.reducers.max(每個任務最大的reduce數,預設為999)

計算reducer數的公式很簡單N=min( hive.exec.reducers.max ,總輸入資料量/ hive.exec.reducers.bytes.per.reducer ) 

如果reduce的輸入(map的輸出)總大小不超過1G,那麼只會有一個reduce任務。

只有一個reduce的場景:

  a、沒有group by 的彙總

  b、order by

  c、笛卡爾積

如何更改reducer個數,可以參考文末給出的參考連結,感謝連結的作者

與SQL有關:

sql有insert into語句,那麼每次insert 都會產生一個檔案

sql中有order by關鍵字,只能由一個reducer來處理,所以只會產生一個結果檔案

沒有group by的彙總,比如把select pt,count(1) from popt_tbaccountcopy_mes where pt = '2012-07-04' group by pt; 寫成 select count(1) from popt_tbaccountcopy_mes where pt = '2012-07-04',在輸入小於hive.exec.reducers.bytes.per.reducer的情況下後者只有一個reducer

等等

相關推薦

hive SQL 產生結果檔案的問題

每次hive sql執行完會產生幾個結果檔案? 預設的hive結果檔名叫什麼? 這些結果檔案我們可以控制麼,例如改名?個數? 好的下面來解答一下: 一般來說,每次hivesql執行完畢之後只會生成一個結果檔案,名稱預設為000000_0,如果存在類似於insert in

hive SQL查詢結果新增行號

用視窗函式可以解決這個問題:   例:select row_number() over(order by user_id desc) ,tab.* from dws_user_visit_month1 as tab limit 20;   結果:        

hive SQL查詢結果添加行號

添加 desc bubuko row 14. height 上下 sel 問題: 用窗口函數可以解決這個問題:   例:select row_number() over(order by user_id desc) ,tab.* from dws_user_visit_mo

Hive SQL查詢結果寫入指定hdfs路徑

將hive查詢結果寫入指定hdfs路徑下:set mapred.reduce.tasks = 1; insert overwrite directory '/xx/xx/' ROW FORMAT DELIMITED FIELDS TERMINATED BY '~' selec

在xshell中執行hive sql 並將結果寫入另一個txt文字中

在xshell 中進入資料夾:vi test.sql然後將要執行的sql輸入,注意開頭不能有空格寫完後按Esc鍵,輸入:x儲存並退出輸入下面程式碼:/usr/bin/beeline -u "jdbc:hive2://dsrv1.heracles.sohuno.com:1000

hive sql給查詢結果加上一列序號

現有一個表student: select * from student; 然後加上一列序號: select row_number() over(partition by 1) as xuhao, a.* from student a; 得到結果:

postgresql匯出sql執行結果檔案的方法

postgresql中可以匯出某個sql的執行結果到檔案中,方法是在psql中首先執行\o filename,然後執行要匯出結果的sql語句即可,可以看到剛剛執行的sql執行結果已經在filename中了。方便,強大,贊! 舉個例子: psql test_db;

便捷輸出sql查詢結果為TXT/CSV檔案

1. 建立儲存過程sql_to_csv create or replace procedure sql_to_csv(p_query in varchar2, --sql query statement p_dir in varchar2,

EF執行SQL語句 結果和直接在Sqlserver中執行結果不一致

enume 出了 text con query context png syn raw 先說問題 直接執行sql的結果 var result = base.Context.Customers.SqlQuery(sql);   sql 語句是打斷點取得的,連接的也

008-Hadoop Hive sql語法詳解3-DML 操作:元數據存儲

pan 查詢 寫入 所有 not insert語句 int 寫入文件 文件系統 一、概述 hive不支持用insert語句一條一條的進行插入操作,也不支持update操作。數據是以load的方式加載到建立好的表中。數據一旦導入就不可以修改。 DML包括:INSERT插入

數據遷移過程中hive sql調優

操作 reduce mapred set mon 事情 clas 過程 高效 本文記錄的是,在數據處理過程中,遇到了一個sql執行很慢,對一些大型的hive表還會出現OOM,一步一步通過參數的設置和sql優化,將其調優的過程。 先上sql select t1.create

記一次偽*sql查詢結果不一致的

vid eight frame and sna parameter -exec video http 調試代碼發現,兩個操作最後都會調用同一個方法。傳入的參數一致,查詢結果卻不一致。 直接說問題原因:我的兩個操作是aop環繞通知先拿到傳入參數以後,校驗是否需要往另一張表中插

017-Hadoop Hive sql語法詳解7-去重排序、數據傾斜

col 去重排序 sel cluster 可能 更多 分發 指定 clust 一、數據去重排序 1.1、去重   distinct與group by   盡量避免使用distinct進行排重,特別是大表操作,用group by代替   -- 不建議 selec

016-Hadoop Hive sql語法詳解6-job輸入輸出優化、數據剪裁、減少job數、動態分區

分享 hive table 取數 nbsp put union 正在 style 一、job輸入輸出優化 善用muti-insert、union all,不同表的union all相當於multiple inputs,同一個表的union all,相當map一次輸出多條

sql 查詢結果導出到excel

過程 book 查詢 color shell 業務 文件的 arch exce 在平時工作中經常會遇到,sql 查詢數據之後需要發送給業務人員,每次都手工執行腳本然後拷貝數據到excel中,比較耗時耗力,可以考慮自動執行查詢並將結果郵件發送出來。 分兩步實現: 1、執行

SQL 操作結果集 -並集、差集、交集、結果集排序

nbsp 分享 字段名 運算 語法 http 測試數據 結構 put 操作結果集   為了配合測試,特地建了兩個表,並且添加了一些測試數據,其中重復記錄為東吳的人物。   表:Person_1魏國人物       表:Person_2蜀國人物      A、Union形成並

sql查詢結果存入DataTable,然後從DataTable取數據

結果 ble body 查詢 取數 select columns class span for (int i = 0; i < dt.Rows.Count; i++) { string s = "select

hibernate使用setResultTransformer()將SQL查詢結果放入集合中

-h cal 們的 gpo ict dds eas find ans 在平時開發中Hibernate提供的hql基本能夠滿足我們的日常需求。但是在有些特殊的情況下,還是需要使用原生的sql,並且希望sql查詢出來的結果能夠綁定到pojo上。hibernate API中的cr

Hive sql和Presto sql的一些對比

ets ive 對比 簡單的 markdown pac pin down ring 最近由於工作上和生活上的一些事兒好久沒來博客園了,但是寫博客的習慣還是得堅持,新的一年需要更加努力,困知勉行,終身學習,每天都保持空杯心態.廢話不說,寫一些最近使用到的Presto SQL和

篩選出sql 查詢結果中 不包含某個字符

title www. char kdt nbsp ofo pos ali ati select * from table1 where patindex(‘%關鍵字%‘ , aa) = 0 select * from table1 where charindex(‘關鍵字