轉自:http://blog.chinaunix.net/uid-27177626-id-4653808.html
Hive三種不同的數據導出的方式,根據導出的地方不一樣,將這些方法分為三類:
(1)導出到本地文件系統
(2)導出到HDFS
(3)導出到hive的另一個表中
導出到本地文件系統
執行:
hive> insert overwrite local directory '/root/student'
> select * from student;
通過insert overwrite local directory將hive中的表student的內容倒到本地文件系統的/root下的student目錄下,這條HQL的執行需要啟用Mapreduce完成,運行完這條語句之后,將會在本地文件系統的/root/student目錄下生成文件,這個文件是Reduce產生的結果(這里生成的文件名是000000_0),我們可以看看這個文件的內容:
可以看出這就是表student中的數據,數據之間用空格間隔開來。
注:將數據從hive倒到本地文件系統與將數據倒到hive不一樣,不能用insert into實現。
導出到HDFS
將hive中的數據導出到HDFS和將數據導出到本地文件系統類似,只是命令的執行中少了一個“local”
可以查看hdfs的對應目錄,發現數據確實倒入了指定目錄。
將數據導出到hive的另一張表
即:hive> insert into table hive_student_test
> select id,name,sex,salary
> from student;
前提是在hive中創建好目標表hive_student_test,然后執行上述操作將hive中的student表的數據依據其id,name,sex,salary字段將其導入到目標表中。查詢目標表的結果:
在hive0.11.0版本中新引進了一個新的特性,也就是當用戶將hive查詢結果輸出到文件,用戶可以只用列的分隔符,而在之前的版本中是不能指定列之間的分隔符的。例如:
hive> insert overwrite local directory '/root/student'
> row format delimited
> fields terminated by '\t'
> select * from student;
還可以用hive的-e和-f參數來導出數據,其中-e表示后面直接帶雙引號的sql語句;而-f是接一個文件,文件的內容為一個sql語句。如下所示:
執行:./hive -e "select * from student" >> /root/student11.txt
這個得到的結果也是用\t分割的。也可以用-f實現。
執行:./hive -f /root/SQL.sql >> /root/student12.txt