HIVE导出数据命令hive -e的使用(导出文件前先删除原文件的内容)

       小白最近在工作中遇到,从hive表中向服务器导出txt文档的问题,之前没有注意到一个问题:

情景一:导入到csv文件

       之前一直是将hive表中的查询结果导入到csv文件中,用下面的语句执行:

每次的csv文件都是覆盖上一次的结果

file_path="/home/chen"
file_name_t="test.csv"
hive -e "set hive.resultset.use.unique.column.names=false;set hive.cli.print.header=true; 
select
      d,
      count(distinct orderid) as ordernum,
      sum(roomnum) as roomnum,
      sum(roomprice)as roomprice
 from table
where d >='${zdt.addDay(-10).format("yyyy-MM-dd")}'
  and d < '${zdt.format("yyyy-MM-dd")}'
group by d
;" >> $file_path/$file_name_t

情景二:导入到txt文件

但是,小白在将上面语句同样的,把导出文件换成txt,就出现了问题,大家可以看下有没有遇到过类似的情况

file_path="/home/chen"
file_name_t="test.txt"
hive -e "set hive.resultset.use.unique.column.names=false;set hive.cli.print.header=true; 
select
      d,
      count(distinct orderid) as ordernum,
      sum(roomnum) as roomnum,
      sum(roomprice)as roomprice
 from table
where d >='${zdt.addDay(-10).format("yyyy-MM-dd")}'
  and d < '${zdt.format("yyyy-MM-dd")}'
group by d
;" >> $file_path/$file_name_t

结果为:what??为啥不是覆盖之前的内容??

d ordernum roomnum roomprice
0 2019-07-20 522538 660805 3.86531477E8
1 2019-07-19 544145 688016 4.18172726E8
2 2019-07-23 554484 702300 4.28929831E8
3 2019-07-22 522778 660146 4.02876317E8
4 2019-07-16 520617 657243 3.96917734E8
5 2019-07-21 454326 570644 3.39250668E8
6 2019-07-24 576412 733834 4.50772871E8
7 2019-07-15 487305 610893 3.67915773E8
8 2019-07-17 533549 673089 4.10751332E8
9 2019-07-18 540329 683141 4.17467437E8
10 d ordernum roomnum roomprice
11 2019-07-20 522538 660805 3.86531477E8
12 2019-07-19 544145 688016 4.18172726E8
Traceback (most recent call last):
13 2019-07-23 554484 702300 4.28929831E8
14 2019-07-22 522778 660146 4.02876317E8
15 2019-07-16 520617 657243 3.96917734E8
16 2019-07-21 454326 570644 3.39250668E8
17 2019-07-15 487305 610893 3.67915773E8
18 2019-07-17 533549 673089 4.10751332E8
19 2019-07-18 540329 683141 4.17467437E8
20 2019-07-14 423843 523466 3.02687931E8

遇到这个问题之后,小白在网上搜有没有相关的文档,emmm,很少有专门写这种问题的,查了很多,找到一个有点关系的解决方案,抱着试试看的想法,试了一下,竟然成功了!!

file_path="/home/chen"
file_name_t="test.txt"
hive -e "set hive.resultset.use.unique.column.names=false;set hive.cli.print.header=true; 
select
      d,
      count(distinct orderid) as ordernum,
      sum(roomnum) as roomnum,
      sum(roomprice)as roomprice
 from table
where d >='${zdt.addDay(-10).format("yyyy-MM-dd")}'
  and d < '${zdt.format("yyyy-MM-dd")}'
group by d
;" > $file_path/$file_name_t

是的,就是最终导入的时候把两个箭头改成一个箭头就可以了。

        为了以免之后遇到类似问题的小伙伴有我一样各种查找的经历,我就总结了一下,这个方式,如果还有别的写法,欢迎大家随时交流哦~

发布了92 篇原创文章 · 获赞 125 · 访问量 22万+

猜你喜欢

转载自blog.csdn.net/Jarry_cm/article/details/97264035