Hive6 資料操作

2021-10-25 17:58:12 字數 2809 閱讀 3374

hive中沒有行級別的資料插入、資料更新和刪除操作,唯一途徑就是使用「大量」的資料裝載操作。

load data local inpath '$/california-employees'

overwrite into table employees

partition (country = 'us', state = 'ca');

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個州都執行這些語句,那麼也就意味著需要掃瞄表65次。hive提供了另一種插入方法。

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提供了乙個動態分割槽功能,其可以基於查詢引數推斷出需要建立的分割槽名稱。

insert overwrite table employees

partition (country, state)

select ..., se.cnty, se.st

from staged_employees se;

假設表staged_employees 中共有100個國家和州,執行完上面的查詢後,表employees就有100個分割槽。

也可以混合靜態和動態,其中,靜態分割槽必須出現在動態分割槽鍵之前

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,...