




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Hive 基礎(2):庫、表、字段、交互式查詢的基本操作目錄-· 1、命令行操作· 2、表操作· 3、列操作· 4、查看變量· 5、一個完整的建庫、表例子· 6、常用語句示例· 7、Refer:1、命令行操作(1)打印查詢頭,需要顯示設置:set hive.cli.print.header=true; (2)加"-",其后的都被認為是注釋,但 CLI 不解析注釋。帶有注釋的文件只能通過這種方式執行: hive -f script_name (3)-e后跟帶引號的hive指令或
2、者查詢,-S去掉多余的輸出: hive -S -e "select * FROM mytable LIMIT 3" > /tmp/myquery (4)遍歷所有分區的查詢將產生一個巨大的MapReduce作業,如果你的數據集和目錄非常多, 因此建議你使用strict模型,也就是你存在分區時,必須指定where語句 hive> set hive.mapred.mode=strict;(5)顯示當前使用數據庫set hive.cli.print.current.db=true;(6)設置 Hive Job 優先級set map
3、red.job.priority=VERY_HIGH | HIGH | NORMAL | LOW | VERY_LOW(VERY_LOW=1,LOW=2500,NORMAL=5000,HIGH=7500,VERY_HIGH=10000)set mapred.job.map.capacity=M設置同時最多運行M個map任務set mapred.job.reduce.capacity=N設置同時最多運行N個reduce任務(7)Hive 中的Mapper個數的是由以下幾個參數確定的:mapred.min.split.size ,mapred.max.split.size ,dfs.block.s
4、izesplitSize = Math.max(minSize, Math.min(maxSize, blockSize);map個數還與inputfilles的個數有關,如果有2個輸入文件,即使總大小小于blocksize,也會產生2個mapmapred.reduce.tasks用來設置reduce個數。2、表操作(1)查看某個表所有分區 SHOW PARTITIONS ext_trackflow 查詢具體某個分區 SHOW PARTITIONS ext_trackflow PARTITION(statDate='20140529');
5、;(2)查看格式化的完整表結構 desc formatted ext_trackflow; DESCRIBE EXTENDED ext_trackflow; (3)刪除分區:分區的元數據和數據將被一并刪除,但是對于擴展表則只刪除元數據 ALTER TABLE ext_trackflow DROP PARTITION (statDate='20140529'); (4)查詢是外部表還是內部表 DESCRIBE EXTENDED tablename (5)復制表結構 CREATE EXTERNAL TA
6、BLE IF NOT EXISTS mydb.employees3 LIKE mydb.employees LOCATION '/path/to/data' Note:如果你忽略關鍵字EXTERNAL,那么將依據 employees 是外部還是內部,如果加了那么一定是EXTERNAL,并要LOCATION (6)為內部表某個分區導入數據,Hive將建立目錄并拷貝數據到分區當中 LOAD DATA LOCAL INPATH '$env:HOME/california-employees'
7、160;INTO TABLE employees PARTITION (country = 'US', state = 'CA'); (7)為外部表某個分區添加數據 ALTER TABLE log_messages ADD IF NOT EXISTS PARTITION(year = 2012, month = 1, day = 2) LOCATION 'hdfs:/master_server/data/log_messages/2012/01/02' Note:Hive并不關心分區,
8、目錄是否存在,是否有數據,這會導致沒有查詢結果 (8)修改表:在任何時候你都可以修改表,但是你僅僅修改的是表的元數據,都實際數據不會造成任何影響 例如更改分區指定位置,這個命令不會刪除舊的數據 ALTER TABLE log_messages PARTITION(year = 2011, month = 12, day = 2) SET LOCATION 's3n:/ourbucket/logs/2011/01/02'(9)更改表屬性ALTER TABLE log_messages SET TBLPROPERTIES ('note
9、s' = 'The process id is no longer captured; this column is always NULL');(10)更改存儲屬性ALTER TABLE log_messagesPARTITION(year = 2012, month = 1, day = 1)SET FILEFORMAT SEQUENCEFILE;Note:如果table是分區的話那么partition是必須的(11)指定新的 SerDeALTER TABLE table_using_JSON_storageSET SERDE 'com.example.JS
10、ONSerDe'WITH SERDEPROPERTIES ('prop1' = 'value1','prop2' = 'value2');Note:SERDEPROPERTIE解釋SERDE用的何種模型,屬性值和名稱都為字符串,方便告訴用戶,為自己指定SERDE并且應用于什么模型為當前SERDE設定ALTER TABLE table_using_JSON_storageSET SERDEPROPERTIES ('prop3' = 'value3','prop4' = '
11、;value4');(12)改變存儲屬性ALTER TABLE stocksCLUSTERED BY (exchange, symbol)SORTED BY (symbol)INTO 48 BUCKETS;(13)復雜更改表語句:為各種不同的操作添加 hook ALTER TABLE TOUCHALTER TABLE log_messages TOUCHPARTITION(year = 2012, month = 1, day = 1);典型的應用場景就是當分區有改動的時候,那么將觸發hive -e 'ALTER TABLE log_messages TOUCH PARTITI
12、ON(year = 2012, month = 1, day = 1);'(14)ALTER TABLE ARCHIVE PARTITION 捕獲分區文件到Hadoop archive file也就是HARALTER TABLE log_messages ARCHIVEPARTITION(year = 2012, month = 1, day = 1);(只可以用在被分區的表)(15)保護分區不被刪除和查詢ALTER TABLE log_messagesPARTITION(year = 2012, month = 1, day = 1) ENABLE NO_DROP;ALTER TAB
13、LE log_messagesPARTITION(year = 2012, month = 1, day = 1) ENABLE OFFLINE;Note:與ENABLE對應的是DISABLE,不能應用在未被分區的表(16)按正條件(正則表達式)顯示表hive> SHOW TABLES '.*s'(17)外部表、內部表互轉alter table tablePartition set TBLPROPERTIES ('EXTERNAL'='TRUE'); /內部表轉外部表 alter table tablePartitio
14、n set TBLPROPERTIES ('EXTERNAL'='FALSE'); /外部表轉內部表 (18)分區與分桶:partition(分區:按目錄保存文件,每個partition對應一個目錄)例如:?1234567891011CREATE EXTERNAL TABLE table1 ( column1 STRING,
15、160; column2 STRING, column3 STRING,)PARTITIONED BY (dt STRING)ROW FORMAT DELIMITED FIELDS TERMINATED
16、 BY '|'STORED AS TEXTFILE;ALTER TABLE table1 ADD IF NOT EXISTS PARTITION (dt=20090105);ALTER TABLE table1 ADD IF NOT EXISTS PARTITION (dt=20090102);ALTER TABLE table1 ADD I
17、F NOT EXISTS PARTITION (dt=20081231);bucket(分桶,對指定列作hash,每個bucket對應一個文件)?12345678910111213CREATE TABLE VT_NEW_DATA( column1 STRING, column2
18、160; STRING, column3 STRING,)CLUSTERED BY (column1)SORTED BY (column1)INTO 48 BUCKETSROW FORMAT DELIMITED FIELDS TERMINAT
19、ED BY '|' LINES TERMINATED BY 'n'STORED AS RCFILE;3、列操作(1)重命名列,更改位置,類型和注釋 ALTER TABLE log_messages CHANGE COLUMN hms hours_minutes_seconds INT COMMENT 'The hours, minutes, and seconds part of the timestamp' AFT
20、ER severity; 更改名稱: new column old column type comment不是必須的,你可以添加注釋 AFTER用于更改字段位置 僅修改了元數據并未對源data做任何改動 (2)添加新列 ALTER TABLE log_messages ADD COLUMNS ( app_name STRING COMMENT 'Application name', session_id LONG COMMENT 'The current session id');&
21、#160;(3)刪除和替換列:慎用! ALTER TABLE table_name ADD|REPLACE COLUMNS (col_name data_type COMMENT col_comment, .) ADD是代表新增一字段,字段位置在所有列后面(partition列前) REPLACE則是表示替換表中所有字段。 REPLACE COLUMNS removes all existing columns and adds the new set of columns. REPLACE COLUMNS can also be
22、used to drop columns. For example: "ALTER TABLE test_change REPLACE COLUMNS (a int, b int);" will remove column c' from test_change's schema. Note that this does not delete underlying data, it just changes the schema.(4)REGEX Column SpecificationSELECT 語句可以使用正則表達式做列選擇,下面的語句查詢除
23、了 ds 和 hr 之外的所有列:SELECT (ds|hr)?+.+ FROM test4、查看變量hive> set; hive> set-v; even more output! set輸出 hivevar,hiveconf,system 和 env 命名空間下的所有變量。 set -v包括了輸出Hadoop定義的全部變量。 hive> set hivevar:foo=hello; hive> set hivevar:foo; hivevar:foo=hello 使用變量
24、: hive> create table toss1(i int, $hivevar:foo string); 5、一個完整的建庫、表例子?123456789101112131415161718192021222324252627282930313233343536373839- 創建數據庫create database ecdata WITH DBPROPERTIES ('creator' = 'June', 'date'
25、0;= '2014-06-01');- 或者使用 COMMENT 關鍵字- 查看數據庫描述DESCRIBE DATABASE ecdata;DESCRIBE DATABASE EXTENDED ecdata;- 切庫use ecdata; - 刪除表drop table ext_trackflow; - 創建表create EXTERNAL table
26、60;IF NOT EXISTS ext_trackflow ( cookieId string COMMENT '05dvOVC6Il6INhYABV6LAg=', cate1 string
27、160; COMMENT '4', area1 string COMMENT '102', url
28、160; string COMMENT ' trackTime string COMMENT '2014-05-25 23:03:36', trackURLMap map<
29、;string,String> COMMENT '"area":"102","cate":"4,29,14052"',)PARTITIONED BY (statDate STRING)ROW FORMAT DELIMITEDFIELDS TERMINATED BY '001'COLLECTION&
30、#160;ITEMS TERMINATED BY '002'MAP KEYS TERMINATED BY '003'LINES TERMINATED BY 'n'STORED AS TEXTFILELOCATION '/DataWarehouse/ods/TrackFlowTable' -添加分區語句ALTER TABLE ext_trackflow ADD
31、60;PARTITION (statDate='20140525') LOCATION '/DataWarehouse/ods/TrackFlowTable/20140525' -每天建立分區yesterday=date -d '1 days ago' +'%Y%m%d'hive -e "use ecdata; ALTER TABLE ext_trackflow
32、 ADD PARTITION (statDate='$yesterday') LOCATION '/DataWarehouse/ods/TrackFlowTable/$yesterday'"6、常用語句示例(1)按頁面類型統計 pv select pageType, count(pageType) from ext_trackflow where statDate = '20140521' group by pageType; Note:一般 SELECT 查詢會掃描
33、整個表,使用 PARTITIONED BY 子句建表,查詢就可以利用分區剪枝(input pruning)的特性 Hive 當前的實現是,只有分區斷言出現在離 FROM 子句最近的那個WHERE 子句中,才會啟用分區剪枝(2)導出查詢結果到本地的兩種方式INSERT OVERWRITE LOCAL DIRECTORY '/home/jun06/tmp/110.112.113.115' select area1, count(area1) from ext_trackflow where statDate = '20140521' group by ar
34、ea1 having count(area1) > 1000;hive -e 'use ecdata; select area1, count(area1) from ext_trackflow where statDate = '20140521' group by area1 having count(area1) > 1000;' > a.txt(3)map 數據結構的查詢與使用select trackURLMap, extField, unitParamMap, queryParamMap
35、 from ext_trackflow where statDate = '20140525' and size(unitParamMap)!=0 limit 10;(4)下面的查詢語句查詢銷售記錄最大的 5 個銷售代表。SET mapred.reduce.tasks = 1;SELECT * FROM test SORT BY amount DESC LIMIT 5;(5)將同一表中數據插入到不同表、路徑中:FROM srcINSERT OVERWRITE TABLE dest1 SELECT src.* WHERE src.key < 100INSERT OVERWR
36、ITE TABLE dest2 SELECT src.key, src.value WHERE src.key >= 100 and src.key < 200INSERT OVERWRITE TABLE dest3 PARTITION(ds='2008-04-08', hr='12') SELECT src.key WHERE src.key >= 200 and src.key < 300INSERT OVERWRITE LOCAL DIRECTORY '/tmp/dest4.out' SELECT src.value
37、 WHERE src.key >= 300;(6)用streaming方式將文件流直接插入文件:hive> FROM invites a INSERT OVERWRITE TABLE events SELECT TRANSFORM(a.foo, a.bar) AS (oof, rab) USING '/bin/cat' WHERE a.ds > '2008-08-09'(7)Hive 只支持等值連接(equality joins)、外連接(outer joins)和(left semi joins)。Hive 不支持所有非等值的連接,因為非等值
38、連接非常難轉化到 map/reduce 任務 LEFT,RIGHT和FULL OUTER關鍵字用于處理join中空記錄的情況LEFT SEMI JOIN 是 IN/EXISTS 子查詢的一種更高效的實現join 時,每次 map/reduce 任務的邏輯是這樣的:reducer 會緩存 join 序列中除了最后一個表的所有表的記錄,再通過最后一個表將結果序列化到文件系統實踐中,應該把最大的那個表寫在最后(8)join 查詢時,需要注意幾個關鍵點只支持等值joinSELECT a.* FROM a JOIN b ON (a.id = b.id)SELECT a.* FROM a JOI
39、N b ON (a.id = b.id AND a.department = b.department)可以 join 多于 2 個表,例如SELECT a.val, b.val, c.val FROM a JOIN b ON (a.key = b.key1) JOIN c ON (c.key = b.key2)Note:如果join中多個表的 join key 是同一個,則 join 會被轉化為單個 map/reduce 任務(9)LEFT,RIGHT和FULL OUTERSELECT a.val, b.val FROM a LEFT OUTER JOIN b ON (a.key=b.key)如果你想限制 join 的輸出,應該在 WHERE 子句中寫過濾條件或是在 join 子句中寫容易混淆的問題是表分區的情況 SELECT c.val, d.val FROM c LEFT OUTER JOIN d
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫療信息安全管理醫院系統安全風險全面評估
- Axure RP 互聯網產品原型設計課件 第11章 設計制作網頁原型
- 考研的心得體會模版
- 醫療園區緊急救援體系中的資源整合與配置
- ktv消防工程合同范例
- 從無序到有序區塊鏈技術在商業信任中的作用
- 小兒蛔蟲性腸梗阻的臨床護理
- 住宅機電分包合同范例
- 醫美行業的投資趨勢與風險分析
- 醫務人員個人防護裝備的應用
- 第四單元 社會爭議解決(大單元說課稿)高二政治同步備課系列(統編版選擇性必修2)
- 文創產品設計課件
- 兒童主任培訓課件
- 2025年黃山旅游招聘筆試參考題庫含答案解析
- 毛澤東思想和中國特色社會主義理論體系概論(大連海事大學)知到智慧樹章節測試課后答案2024年秋大連海事大學
- 涉案虛擬貨幣刑事處置的全流程方案與正當程序
- 熱力管道吊裝專項方案
- JBQGTGST9000控制器說明書
- 水下探測技術發展-洞察分析
- UL2595標準中文版-2015電池驅動設備的要求中文版
- 初二英語語法填空浙江版單選題100道及答案解析
評論
0/150
提交評論