hive中沒有行級別的資料插入、資料更新和刪除操作,唯一途徑就是使用「大量」的資料裝載操作。
load data local inpath '$/california-employees'
overwrite into table employees
partition (country = 'us', state = 'ca');
如果staged_employees 非常大,而且使用者需要對 65個州都執行這些語句,那麼也就意味著需要掃瞄表65次。hive提供了另一種插入方法。insert overwrite table employees
partition (country = 'us', state = 'or')
select * from staged_employees se
where se.cnty = 'us' and se.st = 'or';
from staged_employees se
insert overwrite table employees
partition (country = 'us', state = 'or')
select * from where se.cnty = 'us' and se.st = 'or';
insert overwrite table employees
partition (country = 'us', state = 'ca')
select * from where se.cnty = 'us' and se.st = 'ca';
insert overwrite table employees
partition (country = 'us', state = 'il')
select * from where se.cnty = 'us' and se.st = 'il';
需要建立非常多的分割槽,那麼使用者就需要寫非常多的sql,hive提供了乙個動態分割槽功能,其可以基於查詢引數推斷出需要建立的分割槽名稱。
假設表staged_employees 中共有100個國家和州,執行完上面的查詢後,表employees就有100個分割槽。insert overwrite table employees
partition (country, state)
select ..., se.cnty, se.st
from staged_employees se;
也可以混合靜態和動態,其中,靜態分割槽必須出現在動態分割槽鍵之前
動態分割槽的屬性值:insert overwrite table employees
partition (country = 'us', state)
select ..., se.cnty, se.st
from staged_employees se
where se.cnty = 'us';
屬性名稱
預設值描述
hive.exec.dynamic.partition
false
設定為true,表示開啟動態分割槽功能
hive.exec.dynamic.partition.mode
strict
設定為nonstrict,表示允許所有分割槽都是動態的
hive.exec.max.dynamic.partitions.pernode
100hive.exec.max.dynamic.partitions
+1000
乙個動態分割槽建立語句可以建立的最大動態分割槽個數
hive.exec.max.created.files
100000
全域性可以建立最大檔案數
這個功能常用於從乙個大的寬表中選取部分需要的資料集create table ca_employees
as select name, salary, adress
from employees
where se.state = 'ca';
hadoop fs -cp source_path target_path
或者
可以指定多個輸出資料夾目錄的:insert overwrite local directory '/tmp/ca_employees'
select name, salsry, adress
from employees
where se.state = 'ca';
from staged_employees se
insert overwrite local directory '/tmp/ca_employees'
select * where se.cty = 'us' and se.st = 'or';
insert overwrite local directory '/tmp/ca_employees'
select * where se.cty = 'us' and se.st = 'ca';
insert overwrite local directory '/tmp/ca_employees'
select * where se.cty = 'us' and se.st = 'il';
Hive 6 資料庫操作
乙個資料庫對應與檔案系統中的乙個目錄。且他們的根目錄即是 hive.metastore warehouse dir配置項來設定的。比如我這裡就是 user henvealf hive warehouse 剛開始進入 hive 命令行時,預設位於名為 default 的預設資料庫中。其資料目錄就在 u...
hive資料操作
select from employees 在這種情況下可以簡單的讀取employees對應的儲存目錄下的檔案,然後輸出到格式化後的內容到控制台 對於where語句中的過濾條件只是分割槽字段這種情況 無論是否使用limit語句限制輸出記錄數 也無需mapreduce過程的 select from e...
hive資料操作
vi tb hive.txt 12 34 56 7 12 13 41 2 31 17 21 3 71 2 31 1 12 34 11 2 34 root namenode 82 hive w hive shell 建表結構 hive create table tb hive a int,b int,...