Hive_Hive查詢結果匯出的幾種方式
我們經常利用Hive完成一些資料報表統計的需求,此時我們在特定場景中需要對Hive查詢的結果做匯出,
這樣就延伸出了幾種查詢結果匯出的方法,我們這裡做一下總結。
1.利用beeline 執行查詢,將輸出重定向的方式
2.利用insert overwrite 的方式,將查詢結果匯出hdfs或者本地
第一步我們看下主體的查詢語句:
use default; SELECT media_info.media_name, media_tmp.* , activity_info.*, camp_media_tmp.* FROM ( SELECT activity.id, activity.activity_name, advertiser.advertiser_name, agency.agency_name FROM promotion_activity_mysql AS activity JOIN admin_advertiser_mysql AS advertiser ON activity.advertiser_id = advertiser.id JOIN admin_agency_mysql AS agency ON advertiser.agency_id = agency.id ) AS activity_info JOIN ( SELECT mid.mediaid , mid.campaignid , SUM(mid.campimp) as camp_imp , SUM(mid.campclick) as camp_click , SUM(mid.campclickcost) as click_cost FROM clickcube_mid AS mid WHERE mid.day >= '2018-06-01' AND mid.day <= '2018-06-30' GROUP BY mid.mediaid, mid.campaignid ) AS camp_media_tmp ON activity_info.id = camp_media_tmp.campaignid JOIN ( SELECT '2018-06' , mid.mediaid , SUM(mid.mediaimp) AS media_imp_total , SUM(mid.mediaclick) AS media_clk_total , SUM(mid.mediaclickcost) AS media_cost FROM clickcube_mid AS mid WHERE mid.day >= '2018-06-01' AND mid.day <= '2018-06-30' GROUP BY mid.mediaid ) AS media_tmp ON camp_media_tmp.mediaid = media_tmp.mediaid JOIN admin_media_mysql AS media_info ON media_info.id = media_tmp.mediaid ORDER BY media_tmp.mediaid, camp_media_tmp.campaignid ;
1.首先我們看下beeline執行查詢,檔案重定向的方式
缺點:該種將資料匯出的方式,其實跟在控制檯將查詢結果輸出並沒有什麼區別。
輸出會包含很多冗餘的資訊
首先我們需要對beeline 的引數較為了解:
傳送門:
Hive _ Hive2 新版連線工具 beeline 詳解
這裡我們需要注意一個問題,hive查詢預設不顯示錶頭的,我們需要開啟顯示錶頭的開關
我們將這個操作寫到 **.init 檔案中
final_to_hdfs_201806.init
SET hive.cli.print.header=true;
這裡我們就可以利用檔案中重定向了,我們將beeline 執行的過程寫到shell 指令碼中 .
final_to_file.sh
#!/bin/bash
beeline -u jdbc:hive2://10.180.0.26:10000 -n cloudera-scm -f final_to_file_201806_report.hql -i final_to_hdfs_201806.init > final_report_file.txt
看下最終執行的結果
[[email protected] 20180703_media_agency_job]$ head -n 10 final_report_file.txt 0: jdbc:hive2://10.180.0.26:10000> 0: jdbc:hive2://10.180.0.26:10000> SET hive.cli.print.header=true; 0: jdbc:hive2://10.180.0.26:10000> 0: jdbc:hive2://10.180.0.26:10000> 0: jdbc:hive2://10.180.0.26:10000> 0: jdbc:hive2://10.180.0.26:10000> use default; 0: jdbc:hive2://10.180.0.26:10000> 0: jdbc:hive2://10.180.0.26:10000> SELECT media_info.media_name, media_tmp.* , activity_info.*, camp_media_tmp.* . . . . . . . . . . . . . . . . .> FROM . . . . . . . . . . . . . . . . .> (
2.利用insert overwrite 的方式,將查詢結果匯出hdfs或者本地
缺點: 該種方式並沒有資料表頭的資訊,需要手動增加表頭
首先我們看下對Hive 資料匯出語句 INSERT OVERWRITE 的介紹:
Standard syntax:
INSERT OVERWRITE [LOCAL] DIRECTORY directory1
[ROW FORMAT row_format] [STORED AS file_format] (Note: Only available starting with Hive 0.11.0)
SELECT ... FROM ...
Hive extension (multiple inserts):
FROM from_statement
INSERT OVERWRITE [LOCAL] DIRECTORY directory1 select_statement1
[INSERT OVERWRITE [LOCAL] DIRECTORY directory2 select_statement2] ...
row_format
: DELIMITED [FIELDS TERMINATED BY char [ESCAPED BY char]] [COLLECTION ITEMS TERMINATED BY char]
[MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char]
[NULL DEFINED AS char] (Note: Only available starting with Hive 0.13)
可以該種方式的支援比較完善
首先匯出的資料格式是可選的:
[STORED AS file_format] (Note: Only available starting with Hive 0.11.0)
也就是說匯出的資料格式是可選的,到目前為止可選的資料檔案型別主要為以下幾種檔案:
file_format:
: SEQUENCEFILE
含有資料的元資訊,可分塊,資料按行組織起來
| TEXTFILE
TEXTFILE 最原始的文字檔案
| RCFILE (Note: Only available starting with Hive 0.6.0)
資料按列組織起來
| ORC (Note: Only available starting with Hive 0.11.0)
| AVRO (Note: Only available starting with Hive 0.14.0)
| INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname| PARQUET
資料按行組織起來
這裡我們存為textfile
示例:
STORED AS TEXTFILE
其次匯出的欄位分隔符是可以自己設定的,
Hive 中欄位之間的分隔符預設是 ^A (ascii碼是\00001),
不便於修改檢視,我們將分隔符改為 , (逗號)
示例:
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
最後查詢的資料檔案的位置是可以指定的,可以存放在執行查詢的機器的本地磁碟上,也可以存放在hdfs上,這裡我們指定hdfs.
INSERT OVERWRITE [LOCAL] DIRECTORY directory1
示例:
INSERT OVERWRITE directory '/tmp/201806_report'
最終的查詢語句
use default;
INSERT OVERWRITE directory '/tmp/201806_report'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE
-- STORED AS SEQUENCEFILE
SELECT media_info.media_name, media_tmp.* , activity_info.*, camp_media_tmp.*
FROM
(
SELECT
activity.id,
activity.activity_name,
advertiser.advertiser_name,
agency.agency_name
FROM promotion_activity_mysql AS activity
JOIN admin_advertiser_mysql AS advertiser ON activity.advertiser_id = advertiser.id
JOIN admin_agency_mysql AS agency ON advertiser.agency_id = agency.id
) AS activity_info
JOIN
(
SELECT
mid.mediaid ,
mid.campaignid ,
SUM(mid.campimp) as camp_imp ,
SUM(mid.campclick) as camp_click ,
SUM(mid.campclickcost) as click_cost
FROM
clickcube_mid AS mid
WHERE mid.day >= '2018-06-01' AND mid.day <= '2018-06-30'
GROUP BY mid.mediaid, mid.campaignid
) AS camp_media_tmp ON activity_info.id = camp_media_tmp.campaignid
JOIN
(
SELECT
'2018-06' ,
mid.mediaid ,
SUM(mid.mediaimp) AS media_imp_total ,
SUM(mid.mediaclick) AS media_clk_total ,
SUM(mid.mediaclickcost) AS media_cost
FROM
clickcube_mid AS mid
WHERE mid.day >= '2018-06-01' AND mid.day <= '2018-06-30'
GROUP BY mid.mediaid
) AS media_tmp ON camp_media_tmp.mediaid = media_tmp.mediaid
JOIN
admin_media_mysql AS media_info ON media_info.id = media_tmp.mediaid
ORDER BY media_tmp.mediaid, camp_media_tmp.campaignid
;
我們將執行過程寫入指令碼中
#!/bin/bash
beeline -u jdbc:hive2://10.180.0.26:10000 -n cloudera-scm -f final_to_hdfs_201806_report.hql -i final_to_hdfs_201806.init
最終的執行結果:
我們檢視下執行結果:
相關推薦
Hive_Hive查詢結果匯出的幾種方式
我們經常利用Hive完成一些資料報表統計的需求,此時我們在特定場景中需要對Hive查詢的結果做匯出,這樣就延伸出了幾種查詢結果匯出的方法,我們這裡做一下總結。1.利用beeline 執行查詢,將輸出重定向的方式2.利用insert overwrite 的方式,將查詢結
Mysql查詢結果匯出為Excel的幾種方法
本想直接轉發,奈何密碼忘記了。原文複製過來吧。 原文地址:https://www.cnblogs.com/qiaoyihang/p/6398673.html 【我使用的是方法二】 本文地址:http://www.cnblogs.com/qiaoyihang/p/6398
mybatis進行模糊查詢的幾種方式
單個 ase nco ash face myba select from rda mapper文件: <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org
SQL分頁查詢的幾種方式
但是 order 結果 htm sql分頁 sele esc 註意 介紹 https://www.cnblogs.com/lxhbky/p/5962393.html 需求:查詢表dbo.Message,每頁10條,查詢第2頁 1:TOP() SELECT TOP(2
Hibernate的條件查詢的幾種方式+查詢所有的記錄
數據庫 rop query 寫法 OS 由於 AC 對象 tst 1、 第一種,用?占位符,如: //登錄(用?占位符) public List<UserPO> LoginUser(UserPO up)throws Exception{ Session
SQL 的模糊查詢的幾種方式
tween SQ 列名 HERE like BE between 指定 模糊查詢 1、使用’Like‘進行查詢 語法: where <列名> [NOT] Like <字符表達式> 2、使用’in‘在限定值內進行查詢 語法:wher
thinkphp資料庫查詢返回的幾種結果
thinkphp資料庫查詢返回的幾種結果常用於判斷,如果結果不知道,就無法正確寫判斷語句。thinkphp無結果時常返回NULL,而不是false,這樣可能造成一些問題,!==false和===false。 select 有結果:array 無結果:NULL findAll 有結果:array 無結
mybatis - 關於多表查詢 結果的兩種封裝方式(註解版 , xml版)
需求: 一對多查詢,查詢使用者,同時查詢賬號的集合! 案例分析: 1.一個使用者可以有多個賬號 , 也可以沒有賬號.  
mybatis學習(5):關聯查詢的幾種方式
文章末尾附上Employee.java 和 Department.java 方式一:聯合查詢:級聯屬性封裝結果集 <resultMap type="com.atguigu.mybatis.bean.Employee" id="MyDi
php檔案匯出的幾種方式
最近需要大資料匯出,於是在網上找了一下,在這進行一下整理,希望可以幫助到大家。 一、PHP 自帶函式 fputcsv 可以實現列印報表(Excel)功能 優點是: 1 執行效率高 2 不需要第三方庫 3 用起來很方便 4 實時生成。用流的形式傳輸 缺點是: 1 在 Linux 執行後,
Hive資料匯入匯出的幾種方式
一,Hive資料匯入的幾種方式 首先列出講述下面幾種匯入方式的資料和hive表。 Hive表: 建立testA: CREATE TABLE testA ( id INT, name string, area string ) PARTITIONED BY (crea
PLSql -- 遞迴查詢的另幾種實現方式(函式/儲存過程)
問題 這是一個樹結構,查詢教師“胡明星”的所有主管及姓名:(無主管的教師也需要顯示),顯示(教師編號、教師名稱、主管編號、主管名稱) 解決1 declare v_tno hand_t
SQL Server 返回結果集的幾種方式
1. 使用 Table Function 返回結果集 -- 1. table function use AdventureWorks2008 go if exists ( selec
三 JPA復雜查詢的幾種方式
rspec rep .get 很多 兩個 page 金額 ati con 多條件查詢有很多方式 接口命名策略 按照JPA的命名策略命名,就可以實現單條件或者多條件的等值查詢 命名策略 要以find或者findAll開頭,單字段查詢,find後跟字段的屬性名字,參數傳入字段的
往HIVE表中匯入匯出資料的幾種方式詳解
一:往HIVE表中匯入匯出資料語法結構:[ ]帶括號的表示可選擇欄位LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTOTABLE tablename
獲取Linux核心未匯出符號的幾種方式
從Linux核心的2.6某個版本開始,核心引入了匯出符號的機制。只有在核心中使用EXPORT_SYMBOL或EXPORT_SYMBOL_GPL匯出的符號才能在核心模組中直接使用。然而,核心並沒有匯出所有的符號。例如,在3.8.0的核心中,do_page_fault就沒有被匯出。 而我的核心模組中需要
hibernate資料查詢的幾種方式
1.使用主鍵id載入物件(load(),get()); 2.通過物件導航,比如通過stu.getTeam()得到team的例項; 3 使用hql; 4使用qbc(query by criteria) 5直接使用sql語句取得記錄集; 一般都使用後面三種方式. 注意.hql是面
總結Mysql 模糊查詢的幾種方式
兩個 detail inf 正則 查詢 配對 info 小寫 使用 總結下開發過程中用過模糊查詢功能所用的一些東西,還有就是在建表時一定要考慮完善在建表,否則後期數據量大了在改表會非常的麻煩,請不要為了能夠盡快用表而匆匆創建。在這也是給自己一個警醒,以後不再犯。 #sele
Eclipse安裝svn插件的幾種方式 轉帖....
如果 version name feature help sin 鏈接 exe 文件 Eclipse安裝svn插件的幾種方式 1.在線安裝: (1).點擊 Help --> Install New Software... (2).在彈出的窗口中點擊add按鈕,輸
解決瀏覽器跨域的幾種方式
doc cor 求和 對象 跨域 http onf 從服務器 console 1、什麽是跨域問題 在頁面中使用js訪問其他網站的數據時,就會出現跨域問題,比如在網站中使用ajax請求其他網站的天氣、快遞或者其他數據接口時,以及hybrid app中請求數據,