关于hive:Hive基本操作

Hive DML

1、插入数据

1.1. Loading files into tables
--加载本地数据到hive表
    load data local inpath '/root/data/data' into table psn;--(/root/data/data指的是本地        linux目录)
--加载hdfs数据文件到hive表
    load data inpath '/data/data' into table psn;--(/data/data指的是hdfs的目录)

留神:
1、load操作不会对数据做任何的转换批改操作
2、从本地linux load数据文件是复制文件的过程
3、从hdfs load数据文件是挪动文件的过程
4、load操作也反对向分区表中load数据,只不过须要增加分区列的值

1.2. Insert

insert形式运行MR程序,通过程序将数据输入到表目录!
在某些场景,必须应用insert形式来导入数据:

  1. 向分桶表插入数据
  2. 如果指定表中的数据,不是以纯文本模式存储,须要应用insert形式导入

语法:
insert into|overwrite table 表名 select xxx | values(),(),()
insert into: 向表中追加新的数据
insert overwrite: 先清空表中所有的数据,再向表中增加新的数据

            
非凡状况: 多插入模式(从一张源表查问,向多个指标表插入)
    from 源表
    insert xxxx  指标表  select xxx
    insert xxxx  指标表  select xxx
    insert xxxx  指标表  select xxx

举例: from deptpart2
       insert into table deptpart1 partition(area='huaxi') select deptno,dname,loc
        insert into table deptpart1 partition(area='huaxinan') select deptno,dname,loc 
        
从查问语句中获取数据插入某张表
语法:
    Standard syntax:
    INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)             [IF NOT EXISTS]] select_statement1 FROM from_statement;
    INSERT INTO TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)]                 select_statement1 FROM from_statement;

    Hive extension (multiple inserts):
    FROM from_statement
    INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)             [IF NOT EXISTS]] select_statement1
    [INSERT OVERWRITE TABLE tablename2 [PARTITION ... [IF NOT EXISTS]]                             select_statement2]
    [INSERT INTO TABLE tablename2 [PARTITION ...] select_statement2] ...;
        FROM from_statement
    INSERT INTO TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)]                 select_statement1
    [INSERT INTO TABLE tablename2 [PARTITION ...] select_statement2]
    [INSERT OVERWRITE TABLE tablename2 [PARTITION ... [IF NOT EXISTS]]                             select_statement2] ...;

    Hive extension (dynamic partition inserts):
        INSERT OVERWRITE TABLE tablename PARTITION (partcol1[=val1], partcol2[=val2]                 ...) select_statement FROM from_statement;
        INSERT INTO TABLE tablename PARTITION (partcol1[=val1], partcol2[=val2] ...)                 select_statement FROM from_statement;

–留神:这种形式插入数据的时候须要事后创立好后果表
–从表中查问数据插入后果表

INSERT OVERWRITE TABLE psn9 SELECT id,name FROM psn

–从表中获取局部列插入到新表中

from psn
insert overwrite table psn9
select id,name 
insert into table psn10
select id
1.3. location

在建表时,指定表的location为数据寄存的目录

1.4. import

不仅能够导入数据还能够顺便导入元数据(表构造)。Import只能导入export输入的内容!

IMPORT [[EXTERNAL] TABLE 表名(新表或曾经存在的表) [PARTITION (part_column="value"[, ...])]]
  FROM 'source_path'
  [LOCATION 'import_target_path']
1. 如果向一个新表中导入数据,hive会依据要导入表的元数据主动创立表
2. 如果向一个曾经存在的表导入数据,在导入之前会先检查表的构造和属性是否统一
只有在表的构造和属性统一时,才会执行导入
3. 不论表是否为空,要导入的分区必须是不存在的
import external table importtable1  from '/export1'

2、DML之导出

2.1. insert

将一条sql运算的后果,插入到指定的门路

语法: 
insert overwrite [local] directory '/opt/module/datas/export/student'
               row format xxxx
               select * from student;
               
2.2. export

既能导出数据,还能够导出元数据(表构造)!

export会在hdfs的导出目录中,生成数据和元数据!
导出的元数据是和RDMS无关! 
如果是分区表,能够抉择将分区表的局部分区进行导出!
语法:  export table 表名 [partiton(分区信息) ] to 'hdfspath'

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理