中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

hive常用功能:Hive數據導入導出方式

發布時間:2020-06-20 16:32:59 來源:網絡 閱讀:951 作者:寒月谷 欄目:大數據

作為數據倉庫的Hive,存儲著海量用戶使用的數據。在平常的Hive使用過程中,難免對遇到將外部數據導入到Hive或者將Hive中的數據導出來。今天主要就來學習一下Hive的幾種數據導入和導出的方式。

一、Hive數據導入方式

這里主要介紹四種:

從本地文件系統中導入數據到Hive表;

從HDFS上導入數據到Hive表;

從別的表中查詢出相應的數據并導入到Hive表中;

在創建表的時候通過從別的表中查詢出相應的記錄并插入到所創建的表中。

1、從本地文件系統中導入數據到Hive表

基本語法:

load data local inpath 本地文件路徑 into table Hive表名稱;

先在Hive里面創建好表(demo是網上的),如下:

hive> create table wyp

(id int, name string,

age int, tel string)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY '\t'

STORED AS TEXTFILE;

OK

Time taken: 2.832 seconds

這個表很簡單,只有四個字段,具體含義我就不解釋了。本地文件系統里面有個/home/wyp/wyp.txt文件,內容如下:

[wyp@master ~]$ cat wyp.txt

1 wyp 25 13188888888888

2 test 30 13888888888888

3 zs 34 899314121

wyp.txt文件中的數據列之間是使用\t分割的,可以通過下面的語句將這個文件里面的數據導入到wyp表里面,操作如下:

hive> load data local inpath 'wyp.txt' into table wyp;

Copying data from file:/home/wyp/wyp.txt

Copying file: file:/home/wyp/wyp.txt

Loading data to table default.wyp

Table default.wyp stats:

[num_partitions: 0, num_files: 1, num_rows: 0, total_size: 67]

OK

Time taken: 5.967 seconds

這樣就將wyp.txt里面的內容導入到wyp表里面去了,可以到wyp表的數據目錄下查看,如下命令:

hive> dfs -ls /user/hive/warehouse/wyp ;

Found 1 items

-rw-r--r--3 wyp supergroup 67 2014-02-19 18:23 /hive/warehouse/wyp/wyp.txt

需要注意的是:

和我們熟悉的關系型數據庫不一樣,Hive現在還不支持在insert語句里面直接給出一組記錄的文字形式,也就是說,Hive并不支持INSERT INTO …. VALUES形式的語句。

2、HDFS上導入數據到Hive表

基本語法:

load data inpath HDFS文件路徑 into table Hive表名稱;

從本地文件系統中將數據導入到Hive表的過程中,其實是先將數據臨時復制到HDFS的一個目錄下(典型的情況是復制到上傳用戶的HDFS home目錄下,比如/home/wyp/),然后再將數據從那個臨時目錄下移動(注意,這里說的是移動,不是復制!)到對應的Hive表的數據目錄里面。既然如此,那么Hive肯定支持將數據直接從HDFS上的一個目錄移動到相應Hive表的數據目錄下,假設有下面這個文件/home/wyp/add.txt,具體的操作如下:

[wyp@master /home/q/hadoop-2.2.0]$ bin/hadoop fs -cat /home/wyp/add.txt

5 wyp1 23 131212121212

6 wyp2 24 134535353535

7 wyp3 25 132453535353

8 wyp4 26 154243434355

上面是需要插入數據的內容,這個文件是存放在HDFS上/home/wyp目錄(和一中提到的不同,一中提到的文件是存放在本地文件系統上)里面,我們可以通過下面的命令將這個文件里面的內容導入到Hive表中,具體操作如下:

hive> load data inpath '/home/wyp/add.txt' into table wyp;

Loading data to table default.wyp

Table default.wyp stats:

[num_partitions: 0, num_files: 2, num_rows: 0, total_size: 215]

OK

Time taken: 0.47 seconds
hive> select * from wyp;

OK

wyp1    23      131212121212

wyp2    24      134535353535

wyp3    25      132453535353

wyp4    26      154243434355

wyp     25      13188888888888

test    30      13888888888888

zs      34      899314121

Time taken: 0.096 seconds, Fetched: 7 row(s)

從上面的執行結果我們可以看到,數據的確導入到wyp表中了!請注意load data inpath ‘/home/wyp/add.txt’ into table wyp;里面是沒有local這個單詞的,這個是和一中的區別。

3、從別的表中查詢出相應的數據并導入到Hive表中

基本語法:

insert into table 目標表名稱

   [partition (分區字段=值)]

   select 一組字段

   from 源表名稱;

假設Hive中有test表,其建表語句如下所示:

hive> create table test(

id int, name string

,tel string)

partitioned by

(age int)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY '\t'

STORED AS TEXTFILE;

OK

Time taken: 0.261 seconds

大體和wyp表的建表語句類似,只不過test表里面用age作為了分區字段。對于分區,這里在做解釋一下:

分區:在Hive中,表的每一個分區對應表下的相應目錄,所有分區的數據都是存儲在對應的目錄中。比如wyp表有dt和city兩個分區,則對應dt=20131218,city=BJ對應表的目錄為/user/hive/warehouse/dt=20131218/city=BJ,所有屬于這個分區的數據都存放在這個目錄中。

下面語句就是將wyp表中的查詢結果并插入到test表中:

hive> insert into table test

partition (age='25')

select id, name, tel

from wyp;

#########################################

這里輸出了一堆Mapreduce任務信息,這里省略

#########################################

Total MapReduce CPU Time Spent: 1 seconds 310 msec

OK

Time taken: 19.125 seconds

hive> select * from test;

OK

5       wyp1    131212121212    25

6       wyp2    134535353535    25

7       wyp3    132453535353    25

8       wyp4    154243434355    25

1       wyp     13188888888888  25

2       test    13888888888888  25

3       zs      899314121       25

Time taken: 0.126 seconds, Fetched: 7 row(s)

這里做一下說明:我們知道我們傳統數據塊的形式insert into table values(字段1,字段2),這種形式hive是不支持的。

4、在創建表的時候通過從別的表中查詢出相應的記錄并插入到所創建的表中

基本語法:

create table 新表名稱

  as

  select 一組字段,逗號分隔

  from 源表名稱;

在實際情況中,表的輸出結果可能太多,不適于顯示在控制臺上,這時候,將Hive的查詢輸出結果直接存在一個新的表中是非常方便的,我們稱這種情況為CTAS(create table .. as select)如下:

hive> create table test4

> as

> select id, name, tel

> from wyp;

hive> select * from test4;

OK

5 wyp1 131212121212

6 wyp2 134535353535

7 wyp3 132453535353

8 wyp4 154243434355

1 wyp 13188888888888

2 test 13888888888888

3 zs 899314121

Time taken: 0.089 seconds, Fetched: 7 row(s)

數據就插入到test4表中去了,CTAS操作是原子的,因此如果select查詢由于某種原因而失敗,新表是不會創建的!

二、Hive數據導出方式

可以根據導出的地方不一樣,將這些方式分為三種:

導出到本地文件系統;

導出到HDFS中;

導出到Hive的另一個表中。

1、導出到本地文件系統

基本語法:

insert overwrite local directory '本地文件路徑'

select 字段 from Hive表名稱;

將上文表中的數據導出本地文件系統:

hive> insert overwrite local directory '/home/wyp/wyp'

  >select * from wyp;

這條HQL的執行需要啟用Mapreduce完成,運行完這條語句之后,將會在本地文件系統的/home/wyp/wyp目錄下生成文件,這個文件是Reduce產生的結果。

2、導出到HDFS中

基本語法:

insert overwrite directory 'HDFS文件路徑'

select * from Hive表名稱;

將上文表數據導出到HDFS:

hive> insert overwrite directory '/home/wyp/hdfs'

select * from wyp;

將會在HDFS的/home/wyp/hdfs目錄下保存導出來的數據。注意,和導出文件到本地文件系統的HQL少一個local,數據的存放路徑就不一樣了。

3、導出到Hive的另一個表中

與上文 從別的表中查詢出相應的數據并導入到Hive表中 一致。

向AI問一下細節
推薦閱讀:
  1. hive 安裝
  2. Hive初識

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

来安县| 于都县| 南召县| 新宁县| 海宁市| 秦安县| 惠水县| 霍林郭勒市| 吴旗县| 呼玛县| 襄垣县| 丹棱县| 昌江| 苏尼特右旗| 望谟县| 丰县| 宁波市| 云安县| 芦山县| 天峻县| 宁强县| 元谋县| 达尔| 申扎县| 毕节市| 麟游县| 石泉县| 邻水| 黄山市| 司法| 乐山市| 界首市| 大兴区| 义马市| 偃师市| 和硕县| 广昌县| 台北市| 万年县| 荔波县| 娱乐|