美文网首页
Hive数据操作(0926)

Hive数据操作(0926)

作者: hipeer | 来源:发表于2018-09-26 20:40 被阅读0次

    假设要插数据表为users,数据表为temp_users, 数据文件为users.csv

    1. 向表中装载数据

    load data local inpath '/temp/data/root/users.csv' overwrite into table users 
    partition (age=18)
    

    注:如果分区不存在的话,这个命令会先创建分区,再把数据拷贝到users表对应的目录下。另外Hive不会验证用户装载的数据和表的模式是否匹配,但会验证文件格式是否和表结构的定义一致。例如表在创建时定义存储格式为textfile,那么装载表里的文件也应该是textfile格式。

    2. 通过查询语句往表中插入数据

    // 第一种
    insert overwrite table users 
      partition (age=20) 
      select * from temp_users tu 
      where tu.age=20;
    // 第二种
    from temp_users 
    insert overwrite table users 
      partition (age=18)
      select * where tu.age=18
    insert overwrite table users
      partition (age=19)
      select * where tu.age=19
    insert overwrite table users
      partition (age=20)
      select * where age=20;
    // 第三种(动态分区插入)
    insert overwrite table users 
      partition (age) 
      select tu.name, tu.gender, tu.age 
      from temp_users tu;
    

    注:上述第三种方式中,在进行动态分区插入时,源表字段值和输出分区值之间的关系是根据位置而不是根据命名来匹配的。而且也可以混合使用静动态分区,但静态分区键一定在动态分区键之前。

    3. 单个查询语句创建并加载数据

    create table users 
      as select name, gender, age 
      from temp_users tu
      where tu.age>18;
    

    注:这只能创建一张内表

    4. 导出数据

    // 第一种
    insert overwrite local directory '/temp/data/users' 
      select name, gender, age
      from users u
      where u.age>18;
    // 第二种 
    from table users u
    insert overwrite local directory 'temp/data/users_18'
      select * where u.age=18
    insert overwrite local directory 'temp/data/users_19'
      select * where u.age=19
    insert overwrite local directory 'temp/data/users_20'
      select * where u.age=20;
    

    注:上述命令中的路径可以写成全URL路径,如'hdfs://localhost/temp/data/users'


    附:

    动态分区属性

    属性名 缺省值 描述
    hive.exec.dynamic.partition false 设为true表示开启动态分区功能
    hive.exec.dynamic.partition.mode strict 设置成nonstrict表示允许所有的分区都为动态
    hive.exec.max.dynamic.partitions.pernode 100 表示每个mapper或reducer可以创建的最大动态分区数
    hive.exec.max.dynamic.partitions +1000 一个动态分区语句可以创建的最大动态分区个数
    hive.exec.max.created.files 100000 全局可以创建的最大文件个数

    例子:

    set hive.exec.dynamic.partition=true;
    set hive.exec.dynamic.partition.mode=nonstrict;
    
    insert overwrite table users 
      partition (age) 
      select tu.name, tu.gender, tu.age 
      from temp_users tu;
    

    相关文章

      网友评论

          本文标题:Hive数据操作(0926)

          本文链接:https://www.haomeiwen.com/subject/odxroftx.html