zoukankan      html  css  js  c++  java
  • Hive导入数据

    1.导入数据

    除了前面使用Load Data方式把文件复制或移动到表的目录外,还有以下几种方式:

    1). Insert Overwrite / Into Table 

    hive> insert overwrite table school     
        > select age,name from student;

     2). 对于分区的表,可以使用Partition子句来指明数据要插入哪个分区:

      注意:对于查询出的值不满足分区表列的类型,则会插入NULL

    insert overwrite table logs
        partition(date='2015-01-01',country='CN')
        select name,age
        from student;

    3) [动态分区插入]可以在Select语句中通过使用分区值来动态指明分区 

    //必须指定,不然报错
    set hive.exec.dynamic.partition.mode=nonstrict;


    INSERT
    OVERWRITE TABLE target PARTITION (dt) select col1,col2,dt from source;

    4) 当前Hive不支持insert into table T_Name values(v_2,v_2); 但可以使用下面语句达到此效果

    from stu
    insert into table stu
    select 99,'lisi',2
    limit 1;

    2.多表插入

      在HQL中,可以把Insert语句倒过来,把From子句放在最前面,查询的效果是一样的:

    from student
        insert overwrite table logs
        partition(date='2015-01-01',country='CN')
        select age,name;

      可以在同一个查询中使用多个Insert子句。这种“多表插入”方法比使用多个单独的INSERT语句效率更高,因为只需要扫描一遍源表就可以生成多个不相交的输出。

    FROM records2
    
    INSERT OVERWRITE TABLE stations_by_year
    SELECT year,COUNT(DISTINCT station)
             GROUP BY year
    
    INSERT OVERWRITE TABLE records_by_year
    SELECT year,COUNT(1)
             GROUP BY year
    
    INSERT OVERWRITE TABLE good_redcords_by_year
    SELECT year,COUNT(1)
                 WHERE temperature !=9999
                    AND (quality=0 OR quality=1 OR quality=4 OR quality=5 OR quality=9)
                GROUP BY year;

    这里只有一个源表(records2),但有三个表用于存放针对源表的三种不同查询所生成的结果。 

    3.Create Table … Aa Select

    • 把Hive查询的输出结果存放到一个新的表往往非常方便,这是因为输出结果太多,不适宜显示在控制台上或基于输出结果还有其他后续处理。新表的列定义是从Select 子句所检索的列导出的。
    • CTAS (Create Table ... As Select的简称) 操作是原子的,因此如果Select查询由于某种原因失败,是不会创建新表的。
    • hive的跨数据库查询和普通关系型数据库一样,database.T_Name(default.logs)。
    • 下面语句:logs是分区表,而新cteate的是普通表。  
    hive> create table t081901       
        > as                         
        > select * from default.logs; 
  • 相关阅读:
    校内模拟赛 虫洞(by NiroBC)
    校内模拟赛 旅行(by NiroBC)
    P3830 [SHOI2012]随机树
    4358: permu
    【noi.ac】#309. Mas的童年
    P1438 无聊的数列
    2091: [Poi2010]The Minima Game
    LOJ #6074. 「2017 山东一轮集训 Day6」子序列
    LOJ #6068. 「2017 山东一轮集训 Day4」棋盘
    LOJ #6073. 「2017 山东一轮集训 Day5」距离
  • 原文地址:https://www.cnblogs.com/skyl/p/4736634.html
Copyright © 2011-2022 走看看