一、向管理表中裝載資料
hive沒有行級別的資料插入、更新和刪除操作,往表中裝載資料的唯一途徑就是使用一種「大量」的資料裝載操作。
load:向表中裝載資料
(1)把目錄『/usr/local/data』下的資料檔案中的資料裝載進usr表,並覆蓋原有資料:load data local inpath 『/usr/local/data』 overwrite into table usr;
(2)把目錄『/usr/local/data』下的資料檔案中的資料裝載進usr表, 不覆蓋原有資料:load data local inpath 『/usr/local/data』 into table usr;
(3)把分布式檔案系統目錄'hdfs://master_server/usr/local/data』下的資料檔案資料裝載進usr表,並覆蓋原有資料:load data inpath 『hdfs://master_server/usr/local/data』 overwrite into table usr;
舉例:
load data local inpath '$/california-employees' # $表示home環境變數
into table employees
partition (country='us',state='ca');
如果分割槽目錄不存在,會先建立分割槽目錄,然後將資料拷貝到該目錄下。
如果目標是非分割槽表,語句中應該省略partition子句。
二、通過查詢語句向表中插入資料
insert:通過查詢語句向表中插入資料
(1)向表usr1中插入來自usr表的資料並覆蓋原有資料:insert overwrite table usr1 select * from usr where age=10;
(2)向表usr1中插入來自usr表的資料並追加在原有資料後:insert into table usr1 select * from usr where age=10;
舉例:
insert overwrite table employees
partition (country='us',state='or')
select * from staged_employees se
where se.cnty = 'us' and se.st = 'or';
如果staged_employees表非常大,而且使用者需要對65個州執行這些語句,意味著需要掃瞄staged_employees表65次。可以只掃瞄一次staged_employees表,然後按多種方式進行劃分(可以混合使用insert overwrite和insert into):
from staged_employees se
insert overwrite table employees
partition (country='us',state='or')
select * where se.cnty = 'us' and se.st = 'or'
insert overwrite table employees
partition (country='us',state='ca')
select * where se.cnty = 'us' and se.st = 'ca'
...;
三、動態分割槽插入基於查詢引數推斷出需要建立的分割槽名稱,用於建立非常多的分割槽。
insert overwrite table employee
partition (country,state)
select ...,se.cnty,se.st #根據select語句中最後2列確定分割槽欄位country和state的值
from staged_employees se;
也可以混合使用動態和靜態分割槽,靜態分割槽必須出現在動態分割槽鍵之前:
insert overwrite table employee
partition (country='us',state)
select ...,se.cnty,se.st
from staged_employees se
where se.cnty='us';
動態分割槽功能預設是關閉的。開啟後,預設是以「嚴格」模式執行,這種模式下要求至少有一列分割槽欄位是靜態的,有助於防止因設計錯誤導致產生大量的分割槽。
四、單個查詢語句中建立表並載入資料
不能用於外部表。
create table ca_employees
as select name,salary,address
from employees
where se.state='ca';
五、匯出資料
如果資料檔案恰好是需要的格式,只需要拷貝資料夾或檔案:
hadoop fs -cp source_path target_path
否則,可以使用insert ... directory...:
insert overwrite local directory '/tmp/ca_employees'
select name,salary,address
from employees
where se.state='ca';
可以指定多個輸出資料夾目錄:
from staged_employees se
insert overwrite directory '/tmp/or_employees'
select * where se.cnty = 'us' and se.st = 'or'
insert overwrite directory '/tmp/ca_employees'
select * where se.cnty = 'us' and se.st = 'ca'
...;
Hive程式設計指南 學習筆記01
第四章 hql的資料定義 1 建立資料庫 create database financials create database if not exists financials 2 檢視資料庫 show databases 模糊查詢資料庫 show databases like h.3 建立資料庫修...
hive程式設計指南之資料型別
hive裡有兩種資料型別即 基本資料型別以及集合資料型別 一 基本資料型別 1,tinyint 1byte有符號整數 2,smalint 2byte有符號整數 3,int 4byte有符號整數 4,bigint 8byte有符號整數 5,boolean 布林型別,true或者false 6,floa...
《Hive程式設計指南》之Hive環境安裝
hive 1 解壓 2 配置 hadoop home hive home等環境變數 3 修改配置檔案hive conf cp hive default.xml.template hive site.xml 修改hive.metastore.schema.verification的值為false 建立...