zoukankan      html  css  js  c++  java
  • 保存Hive查询结果的方法 insert overwrite 用法

    很多时候,我们需要将Hive的查询(select)结果保存起来,方便进一步处理或查看。
    在Hive里面提供了不同的方式来保存查询结果,在这里做下总结:

    一、保存结果到本地

    方法1:调用hive标准输出,将查询结果写到指定的文件中
    这个方法最为常见,笔者也经常使用。sql的查询结果将直接保存到/tmp/out.txt中:
    $ hive -e "select user, login_timestamp from user_login" > /tmp/out.txt
    

    方法2:使用INSERT OVERWRITE LOCAL DIRECTORY结果到本地

    hive> insert overwrite local directory "/tmp/out/"                                        
        > select user, login_time from user_login;
    

      

    上面的命令会将select user, login_time from user_login的查询结果保存到/tmp/out/本地目录下。

    我们查看一下/tmp/out/目录下的文件,发现命令执行后,多了两个文件:

    $ find /tmp/out/ -type f
    /tmp/out/.000000_0.crc
    /tmp/out/000000_0
    

      

    默认的字段分割符有时候可能不太方便,幸好Hive提供了修改分割符号的方法,我们只要在导出时指定就可以了:

    hive> insert overwrite local directory "/tmp/out/"
        > row format delimited fields terminated by "	" 
        > select user, login_time from user_login;
    

      

    二、保存结果到hdfs

    保存查询结果到hdfs很简单,使用INSERT OVERWRITE DIRECTORY就可以完成操作:

    hive> insert overwrite directory "/tmp/out/"
        > row format delimited fields terminated by "	" 
        > select user, login_time from user_login;
    

      

    三、保存结果到HIVE表

    方法1、已经建好结果表,使用INSERT OVERWRITE TABLE以覆盖方式写入结果表

    如果结果表已经建好,可以使用INSERT OVERWRITE TABLE将结果写入结果表:

    login_time          	bigint
    hive> insert overwrite table query_result     
        > select user, login_time from user_login;
    

      

    当然,HIVE也提供了追加方式INSERT TABLE,可以在原有数据后面加上新的查询结果。在上面这个例子基础上,我们再追加一个查询结果:

    hive> insert into table query_result
        > select * from query_result;
    

      

    方法2、如果需要新建一个表,用于存放查询结果,可以使用CREATE TABLE AS SELECT语法

    hive> create table query_result 
        > as
        > select user, login_time from user_login;
    

      

    insert overwrite的用法:

    INSERT OVERWRITE TABLE tablename1 PARTITION (partcol1=val1, partcol2=val2 ...) 
    select_statement1 FROM from_statement;
    
    -- 例如:
    insert overwrite table dev.dev_spark_demo_temp partition (dt = '2019-08-08') select pop_vender_id, sale_ord_id from app.app_sjzt_payout_apply_with_order where  dt = '2019-08-05'
    

     

      
    如果查询出来的数据类型和插入表格对应的列数据类型不一致,将会进行转换,但是不能保证转换一定成功,比如如果查询出来的数据类型为int,插入表格对应的列类型为string,可以通过转换将int类型转换为string类型;

    但是如果查询出来的数据类型为string,插入表格对应的列类型为int,转换过程可能出现错误,因为字母就不可以转换为int,转换失败的数据将会为NULL。
      
    insert overwrite是删除原有数据然后在新增数据,如果有分区那么只会删除指定分区数据,其他分区数据不受影响。

    原文链接:https://blog.csdn.net/qq_41797451/article/details/80346361

    Hive Insert命令

    insert  语法详细描述

    https://blog.csdn.net/Post_Yuan/article/details/62887619

  • 相关阅读:
    mysql错误Error(1133): Can’t find any matching row in the use
    xtrbackup备份mysql
    配置Mysql审计
    Mysql:sql语句
    mysql基准测试与sysbench工具
    tomcat排错以及优化
    nginx反向代理
    Nginx
    服务器归分第一篇
    Android安装BusyBox(三星N7108)
  • 原文地址:https://www.cnblogs.com/Allen-rg/p/9295615.html
Copyright © 2011-2022 走看看