首先列出讲述下面几种导入方式的数据和hive表。
- 从本地导入数据
首先需要创建hive 表
load data local inpath '本地文件位置及名称' [overwrite] into table hive表名称,overwrite
为可选命令,表示覆盖原有数据,默认为追加数据
如:
load data local inpath "/home/test.csv" into table test_hive_table #默认追加导入
load data local inpath '/home/test.csv' overwrite into table test_hive_table partition (dataday='20190501'); # 写入到分区表
load data local inpath "/home/test.csv" overwrite into table test_hive_table #覆盖导入
- 从HDFS 中导入数据
load data inpath ‘HDFS 文件路径及文件名称’ [overwrite] into table hive表名称,
overwrite
为可选命令,表示覆盖原有数据,默认为追加数据
如:
load data inpath "/user/dfs/test.txt" into table test_hive_table #默认追加导
load data inpath "/user/dfs/test.txt" overwrite into table test_hive_table #覆盖导入
- hive 导入 hive
- 创建表并导入数据
create table 库名.表名 as hive查询语句;
如:
create table testDB_A.test_table_A as select * from testDB_B.test_table_B;
- hive 表已存在,insert into 导入数据
insert into table 表名 hive查询语句;
如:
insert into table testDB_A.test_table_A select * from testDB_B.test_table_B;
4.从本地导入HDFS中,hive表已建好,并指定HDFS中文件路径,将数据导入HDFS指定目录中。注意:要保重数据能和列对应,并且分隔符需要和建表时保持一致
;
hdfs dfs -put 本地文件路径及名称 hive表和HDFS对应目录
如:
hdfs dfs -put /home/test1.txt /user/hive/test.db/test_table
如果一次需要上传多个文件,比如在home 下有 test1.txt、test2.txt、test3.txt,可以使用通配符的方式来上传多个。
hdfs dfs -put /home/test*.txt /user/hive/test.db/test_table
Hive数据导出的几种方式
- insert方式
- 保存到本地
insert overwrite local directory '本地目录路径' row format delimited fields terminated by '指定分隔符' hive查询语句;
如:
insert overwrite local directory "/home/table_file" row format delimited fields terminated by "\t" select * from hive_table;
- 保存到HDFS
insert overwrite directory 'HDFS目录路径' row format delimited fields terminated by '指定分隔符' hive查询语句;
如:
insert overwrite directory "/user/dfs/table_file" row format delimited fields terminated by "\t" select * from hive_table;
- linux命令行执行HQL
- hive -e "use 库名; hive查询表语句" | tr "," "需要修改的分隔符" > 文件路径及名称
如:
hive -e "use test; select * from test_table" | tr "," "|" > /tmp/table.csv
- hive -f 指定sql文件 | tr "," "需要修改的分隔符" > 文件路径及名称
如:
hive -e my.sql | tr "," "|" > /tmp/table.csv
my.sql 内容如下
use test;
select * from test_table;
- 直接从hive表对应到HDFS目录下get到本地
hdfs dfs -get HDFS目录/(代表所有文件) 本地目录
如:
hdfs dfs -get /user/hive/test.db/test_table/* /home/test_file
下面说下 导出到三中方式到区别
insert 和HDFS 的导出方式: 会在导出的目录存储多个文件,一般在需要导出到其他HDFS 文件中使用
linux命令HQL 的导出方式:会把导出的是数据存入一个文本中,方便使用,一般导出本地使用该方法
网友评论