zoukankan      html  css  js  c++  java
  • Hive输出文件的间隔符

    1.insert 语法格式为:
    基本的插入语法:
    INSERT OVERWRITE TABLE tablename [PARTITON(partcol1=val1,partclo2=val2)]select_statement FROM from_statement
    insert overwrite table test_insert select * from test_table;
    
    对多个表进行插入操作:
    FROM fromstatte
    INSERT OVERWRITE TABLE tablename1 [PARTITON(partcol1=val1,partclo2=val2)]select_statement1
    INSERT OVERWRITE TABLE tablename2 [PARTITON(partcol1=val1,partclo2=val2)]select_statement2
    
    from test_table                     
    insert overwrite table test_insert1 
    select key
    insert overwrite table test_insert2
    select value;
    
    insert的时候,from子句即可以放在select 子句后面,也可以放在 insert子句前面。
    hive不支持用insert语句一条一条的进行插入操作,也不支持update操作。数据是以load的方式加载到建立好的表中。数据一旦导入就不可以修改。
    
    2.通过查询将数据保存到filesystem
    INSERT OVERWRITE [LOCAL] DIRECTORY directory SELECT.... FROM .....
                                                                                                                                                                                                              导入数据到本地目录:
    insert overwrite local directory '/home/zhangxin/hive' select * from test_insert1;
    产生的文件会覆盖指定目录中的其他文件,即将目录中已经存在的文件进行删除。
    
    导出数据到HDFS中:
    insert overwrite directory '/user/zhangxin/export_test' select value from test_table;
    
    同一个查询结果可以同时插入到多个表或者多个目录中:
    from test_insert1
    insert overwrite local directory '/home/zhangxin/hive' select * 
    insert overwrite directory '/user/zhangxin/export_test' select value;
     
    在hive中将结果输出到本地目录下: 
    hive> INSERT OVERWRITE LOCAL DIRECTORY '/home/hadoop/result' > SELECT * FROM table_name 
    查看结果的时候,发现各个字段都连接在一起,如下
    [hadoop@hadoop-24 result]$ more 000000_0 1331903227197_846612012-04-09 1331903230484_756522012-04-09 1331903233859_134242012-04-09 1331903251469_712512012-04-09 1331903253640_325962012-04-09 

    后来人工加上了分割符“空格”,从视觉上感觉好多了,但是,在实际运算的时候,发现输出文件中实际上已经有分割符了,只是视觉上看不出来罢了。

    但是,分隔符和各自的文件/系统的编码设置有关系。在我们的系统上,间隔符为'x01’,直接用split(‘x01’)就可以了。

    No matter what the table format, INSERT OVERWRITE LOCAL DIRECTORY will always use ctrl-A delimiters ('01' ) 
    所以 你可以根据‘01’来分隔 目前似乎还不支持类似于: INSERT OVERWRITE LOCAL DIRECTORY '/tmp/reg_81' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' SELECT * FROM testTable ; 
  • 相关阅读:
    Apache 阿帕奇 配置运行环境
    2019年6月多校联训b层——搜索算法 Problem A 宽搜 营救
    西安集训B Day1 test 问题 C: 小明的城堡
    西安集训B层Day1 test 问题 A: 旅行日记
    二分答案—洛谷P1182 数列分段`Section II`
    2019.5.25 Noip模拟测试2 T2题解
    2019.5.25 Noip模拟测试2 T1题解
    DP专题练习 toasting
    2019.5.1 DP专题训练 山峰数(hill)
    React 点击按钮显示div与隐藏div
  • 原文地址:https://www.cnblogs.com/java20130722/p/3206895.html
Copyright © 2011-2022 走看看