【SQL相关】Hive数据的导入与导出

一、Hive数据导入

1.从本地导入到服务器

--打开SFTP--
lcd c:\users\cielo\desktop --文件的本地目录
cd /data/temp --文件需要上传到的服务器目录
put xxx.txt --需要上传的文件名

2.从服务器上传到hive

--在hive环境下运行以下hql
load data [local] inpath '<文件路径>' [overwrite] into table <表名> [partition(partcol1=vall,partcol2=val2 …)];
--例如
load data local inpath '/data/temp/xxx.txt' overwrite into table1 partition(day_id = 20230808);
  • 当带有 local 关键字时,文件路径指向服务器,即直接将服务器下的文件上传到hive,此时执行的是 copy 操作,不会删除服务器目录下的文件。
  • 不带 local 关键字时,文件路径指向 hdfs ,需要先将文件从服务器上传到 hdfs,再从 hdfs 加载到 hive 中,此时执行的是 move 操作,会删除 hdfs 目录下的文件。把文件从服务器上传到 hdfs 的操作如下:
hdfs dfs -put <文件服务器路径> <文件hdfs路径>
##例如
hdfs dfs -put /data/temp/xxx.txt /user/tempdata/xxx.txt
  •  partition 关键字针对存在分区的表,当带有 overwrite 关键字时,目标表或分区中的原始数据会被删除,插入当前的新数据;不带 overwrite 关键字时,数据会以追加的方式被添加到表或分区中。
  • 若上传的文件路径下已经存在同名文件,则原本的同名文件会被新上传的同名文件替换。

二、Hive数据导出

1.从hive导出到服务器

从hive导出数据到服务器有多种方法。

1.1 insert

--在hive环境下运行以下hql
insert [overwrite] [local] directory '<文件路径>' [row format delimited terminated fields by  '/'] <sql语句>;
--例如
insert overwrite local directory '/data/temp' row format delimited terminated fields by  ',' select * from table1;
  • 当带有 local 关键字时,文件路径指向服务器,即直接将hive上的数据导出到服务器目录下。
  • 不带 local 关键字时,文件路径指向 hdfs ,hive上的数据导出到了 hdfs 目录下,需要再从 hdfs 导出到服务器中。把数据从 hdfs 导出到服务器的操作如下:
hdfs dfs -get <文件hdfs路径> <文件服务器路径>;
##例如
hdfs dfs -get /user/tempdata/xxx.txt /data/temp/xxx.txt

 1.2 hadoop 命令

hadoop  fs -copyToLocal <hdfs文件路径> <服务器文件路径>
##例如
hadoop  fs -copyToLocal /user/hive/warehouse/temp.db/table1 /data/temp

使用hadoop命令将数据导出到服务器,需要知道hive表的存储路径,可以在hive环境下运行以下hql:

show create table <表名>;

1.3 hive shell 命令

hive -e 'set hive.cli.print.header = true;select * from table' >> /data/temp table.csv

 hive -e 是Linux下的hive表数据导出命令,可以在不进入hive交互窗口的情况下执行sql语句,通过 '>>' 可以将数据导出到服务器上的指定目录下,并存储为csv、xlsx、txt和log等格式的文件。

 set hive.cli.print.header = true 是hive中打印表头的SQL语句,默认为false,打印出来是 <表名>.<字段名> 的格式。如果只想打印字段名,还需要加上以下命令:

set hive.resultset.use.unique.column.names=false;
hive -f /data/temp table.sql >> /data/temp table.csv

当数据导出语句过于复杂时,可以将SQL语句写进一个sql、hql、txt和log等后缀的文件,然后用 hive -f 进行数据导出。

 2.从服务器导出到本地

--打开SFTP
cd /data/temp --hive上导出的文件的服务器目录
lcd c:\users\cielo\desktop --想要导出到的本地目录
get -r table.csv --要导出的文件名

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

25岁的cielo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值