hive資料載入

2021-07-11 16:54:13 字數 3258 閱讀 5090

一.需要注意的問題:

1.hive不支援行級別的增刪改

2.使用overwrite會覆蓋表的原有資料,into則是追加。

3.local會將本地檔案系統複製乙份再上傳至指定目錄,無local只是將本地檔案系統上的資料移動到指定目錄。

4.若目錄指向hdfs上的資料則執行的是move操作。

5.分隔符要與資料檔案中的分隔符一樣,且分隔符預設只有乙個(如:'\t\n')。

6.load資料時,字段型別不能互相轉化時,查詢返回null。

7.select查詢插入,字段型別不能相互轉化時,插入資料為null。

8.select查詢插入資料,字段值順序要與表中字段順序一致,名稱可以不一致(hive在載入資料時不做檢查,查詢時檢查).

9.直接移動資料檔案到含有分割槽表的存放目錄下時,資料存放的路徑層次也和表的分割槽一致,若表中沒有新增相應的分割槽對應資料存放路徑,即使目標路徑下有資料也依然會查不到。

二.load data語句裝載資料

load data匯入資料格式。

1. load data inpath '/user/hadoop/emp.txt'into/overwrite table table_name;

2. load data local inpath'/user/hadoop/emp.txt' into/overwrite table table_name;

3. load data local inpath'/user/hadoop/emp.txt' into/overwrite table table_namepartition(part="a");

例. hive> create table emp(

> id int,

> name string,

> job string,

> salary int

> )

> partitioned by (city string,dt string)

> row format delimited

> fields terminated by '\t'

> lines terminated by '\n'

> stored as textfile;

為了方便操作下文的hive表emp1、emp2均是通過create table table_name like source_table;建立。

三.通過查詢語句向表中插入資料

1.insert into/overwrite table table_nameselect *from source_table;

2.insert into/overwrite table table_namepartition(part="a") select id,name from source_table;

例. hive>insertinto table emp1 partition(city='shanghai',dt='2016-5-9')

在使用此語式時table_name的表結構字段個數,必須與select後查詢字段個數對應。

如無分割槽時可使用ctas方式載入資料更靈活(下面會介紹)。

3.hive還可以一次查詢產生多個不相交的輸出。(降低源表的掃瞄次數)。

from source_table

insert into/overwrite table table_name partition(part="a")

select id,name,age where id>0 and id<20

insert into/overwrite table table_name partition(part="a")

select id,name,age where id>100 and id<120

insert into/overwrite table table_name partition(part="a")

select id,name,age where id>150 and id<200;

例.

四.動態分割槽插入

在需要建立非常多的分割槽時,可以使用動態分割槽,基於查詢建立需要建立的分割槽。動態分割槽功能預設是關閉的,開啟後預設是嚴格模式。嚴格模式要求至少有一列分割槽欄位是靜態的,且必須要放在動態分割槽之前,避免因錯誤操作導致產生大量的分割槽。

set hive.exec.dynamic.partition=true;//開啟動態分割槽

sethive.exec.dynamic.partition.mode=nonstrict; //nostrict無限制模式,不用擔心第一列分割槽是否為靜態。

若為strict,則你需要有乙個靜態分割槽,且必須要放在動態分割槽之前。

動態分割槽資料插入格式:

insert overwrite/into table table_namepartition(part="a")

selectid,name,job as job,salary,award from source_table;

例.

五.通過ctas載入資料,即在建立表的時候通過從別的表中查詢出相應的記錄並插入到所建立的表中。ctas是原子的,若失敗新錶則不會建立。

ctas 資料匯入格式:

create table table_name as select id,namefrom source_table;

例.      hive> create table emp4 as select id,name from emp;

hive表載入資料

總結自己在hive表中常用的幾種載入資料的方式 1.load data 常用 load data inpath 集群路徑.txt load data local inpath 本地路徑 2.select 偶爾用 insert into table tablename1 select from tab...

Hive使用指令碼載入資料

方式一 直接寫在指令碼中 load track logs.sh bin sh 環境變數生效 etc profile hive home hive home opt cdh 5.3.6 hive 0.13.1 cdh5.3.6 日誌目錄 log dir datas tracklogs 獲取昨天的日期 ...

hive載入資料許可權報錯

前提 上傳資料至hdfs 的 user root 下,建立了hive的orc表,準備load資料,建立了臨時的ordertmp的textfile格式表,後面用insert overwrite進目標表。執行load data 從 user root 下載入資料到hive表中,報下面的許可權錯誤。0 j...