Hive表的建立和導入導出數據


Hive是Hadoop的常用工具之一,Hive查詢語言(HiveQL)的語法和SQL類似,基本實現了SQL-92標准。

1. 表的建立

編寫以下的文件:

USE test;
DROP TABLE IF EXISTS student2;
CREATE TABLE student2(
id    INT,
name     STRING,
age    INT,
course    ARRAY<STRING>,
body    MAP<STRING,FLOAT>,
address    STRUCT<street:STRING,number:INT>
)
PARTITIONED BY (state STRING,city STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
COLLECTION ITEMS TERMINATED BY ','
MAP KEYS TERMINATED BY ':'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;

保存為test.hql,該文件指定了表的結構和分隔符。Hive的數據類型除了INT、STRING、FLOAT等基本類型以外,還有三種復雜數據類型:STRUCT、MAP和ARRAY。PARTITIONED BY()指定了表的分區字段,分區字段只能出現一次,否則會出錯。ROW FORMAT DELIMITED指定了各種分隔符。最后指定了文件存儲格式為TEXTFILE。

在Linux終端里輸入如下命令:

hive -f test.hql

該命令執行了test.hql文件,創建了表student2(前提是test數據庫已經被創建)。可以進入hive,輸入

desc student2;

命令查看該表的結構:

2. 從文件導入數據

在Linux中創建一個文本文件,保存為/home/hadoop/student2:

1    Tom    20    Chinese,Maths,English    Height:165,Weight:80    South Street,101    Sichuan    Chengdu
2    Mike    25    Chinese,Maths,English,Computer Science    Height:175,Weight:70    North Street,105    Sichuan    Chengdu
3    Peter    26    Java,Hadoop    Height:168,Weight:68    East Street,12    Sichuan    Chengdu

在Hive中輸入以下命令將該文件里面的數據導入student2:

load data local inpath '/home/hadoop/student2' overwrite into table student2 partition(state='Sichuan', city='Chengdu');

overwrite表示將以前的數據覆蓋,local表示是從本地文件導入,如果沒有寫local,則表示從HDFS文件導入。如果文本文件里面沒有寫最后面的Sichuan和Chengdu,導入數據時會自動把這兩個字段分別設置為Sichuan和Chengdu,因為在partition中已經指定了Sichuan和Chengdu。

執行命令:

select * from student2;

可見數據已經被導入表student2:

3. 通過查詢語句導入數據

新建一張表student3,結構和student3一致,然后輸入命令:

from student2
insert overwrite table student3 partition(state='Sichuan', city='Chengdu') select id,name,age,course,body,address;

該命令將student2中的數據導入到student3。注意select后面不能寫"*",否則會出錯,只能寫除了分區字段以外的其他字段。查看student3,可見數據已經被導入:

 4. 數據的導出

輸入命令:

insert overwrite local directory '/home/hadoop/hive1' select * from student2;

將數據導出到本地文件。先新建了一個hive1文件夾,然后將數據導入到hive1文件夾里面的000000_0文件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM